X-Git-Url: http://www.privoxy.org/gitweb/misc.html?a=blobdiff_plain;f=jcc.c;h=5ed93b35688cb7feaba64cfff0d3d205b6e932e4;hb=8312f8334ca6a0b29eab44ffcda8320cbd64b424;hp=5bd0935104618bf8410a6d79f429f8699a2add78;hpb=0680a290e853d85293d692431426def132f29356;p=privoxy.git
diff --git a/jcc.c b/jcc.c
index 5bd09351..5ed93b35 100644
--- a/jcc.c
+++ b/jcc.c
@@ -2080,12 +2080,13 @@ static int read_http_request_body(struct client_state *csp)
if (to_read != 0)
{
- log_error(LOG_LEVEL_CONNECT, "Not enough request body has been read: expected %llu more bytes",
- csp->expected_client_content_length);
+ log_error(LOG_LEVEL_CONNECT,
+ "Not enough request body has been read: expected %lu more bytes",
+ to_read);
return 1;
}
- log_error(LOG_LEVEL_CONNECT, "The last %llu bytes of the request body have been read",
- csp->expected_client_content_length);
+ log_error(LOG_LEVEL_CONNECT,
+ "The last %d bytes of the request body have been read", len);
return 0;
}
@@ -2158,7 +2159,7 @@ static int can_filter_request_body(const struct client_state *csp)
{
log_error(LOG_LEVEL_INFO,
"Not filtering request body from %s: buffer limit %lu will be exceeded "
- "(content length %lluu)", csp->ip_addr_str, csp->config->buffer_limit,
+ "(content length %llu)", csp->ip_addr_str, csp->config->buffer_limit,
csp->expected_client_content_length);
return FALSE;
}
@@ -2205,6 +2206,7 @@ static int send_http_request(struct client_state *csp)
update_client_headers(csp, to_send_len))
{
log_error(LOG_LEVEL_HEADER, "Error updating client headers");
+ freez(to_send);
return 1;
}
csp->expected_client_content_length = 0;
@@ -2229,6 +2231,10 @@ static int send_http_request(struct client_state *csp)
{
log_error(LOG_LEVEL_CONNECT, "Failed sending request headers to: %s: %E",
csp->http->hostport);
+ if (filter_client_body)
+ {
+ freez(to_send);
+ }
return 1;
}
@@ -2520,9 +2526,10 @@ static int send_https_request(struct client_state *csp)
/*********************************************************************
*
- * Function : receive_encrypted_request
+ * Function : receive_encrypted_request_headers
*
- * Description : Receives an encrypted request.
+ * Description : Receives the encrypted request headers when
+ * https-inspecting.
*
* Parameters :
* 1 : csp = Current client state (buffers, headers, etc...)
@@ -2531,7 +2538,7 @@ static int send_https_request(struct client_state *csp)
* JB_ERR_PARSE or JB_ERR_MEMORY otherwise
*
*********************************************************************/
-static jb_err receive_encrypted_request(struct client_state *csp)
+static jb_err receive_encrypted_request_headers(struct client_state *csp)
{
char buf[BUFFER_SIZE];
int len;
@@ -2539,7 +2546,7 @@ static jb_err receive_encrypted_request(struct client_state *csp)
do
{
- log_error(LOG_LEVEL_HEADER, "Reading encrypted headers");
+ log_error(LOG_LEVEL_HEADER, "Waiting for encrypted client headers");
if (!is_ssl_pending(&(csp->ssl_client_attr)) &&
!data_is_available(csp->cfd, csp->config->socket_timeout))
{
@@ -2675,9 +2682,10 @@ static jb_err change_encrypted_request_destination(struct client_state *csp)
/*********************************************************************
*
- * Function : process_encrypted_request
+ * Function : process_encrypted_request_headers
*
- * Description : Receives and parses an encrypted request.
+ * Description : Receives and parses the encrypted headers send
+ * by the client when https-inspecting.
*
* Parameters :
* 1 : csp = Current client state (buffers, headers, etc...)
@@ -2686,7 +2694,7 @@ static jb_err change_encrypted_request_destination(struct client_state *csp)
* JB_ERR_PARSE or JB_ERR_MEMORY otherwise
*
*********************************************************************/
-static jb_err process_encrypted_request(struct client_state *csp)
+static jb_err process_encrypted_request_headers(struct client_state *csp)
{
char *p;
char *request_line;
@@ -2703,7 +2711,7 @@ static jb_err process_encrypted_request(struct client_state *csp)
csp->flags |= CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE;
}
#endif
- err = receive_encrypted_request(csp);
+ err = receive_encrypted_request_headers(csp);
if (err != JB_ERR_OK)
{
if (csp->client_iob->cur == NULL ||
@@ -2798,6 +2806,8 @@ static jb_err process_encrypted_request(struct client_state *csp)
"Failed to get the encrypted request destination");
ssl_send_data_delayed(&(csp->ssl_client_attr),
(const unsigned char *)CHEADER, strlen(CHEADER), get_write_delay(csp));
+ destroy_list(headers);
+
return JB_ERR_PARSE;
}
@@ -2870,7 +2880,7 @@ static jb_err process_encrypted_request(struct client_state *csp)
return JB_ERR_PARSE;
}
- log_error(LOG_LEVEL_HEADER, "Encrypted request processed");
+ log_error(LOG_LEVEL_HEADER, "Encrypted request headers processed");
log_error(LOG_LEVEL_REQUEST, "https://%s%s", csp->http->hostport,
csp->http->path);
@@ -2936,7 +2946,7 @@ static void continue_https_chat(struct client_state *csp)
{
const struct forward_spec *fwd;
- if (JB_ERR_OK != process_encrypted_request(csp))
+ if (JB_ERR_OK != process_encrypted_request_headers(csp))
{
csp->flags &= ~CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE;
return;
@@ -4318,7 +4328,7 @@ static void chat(struct client_state *csp)
"Failed to open a secure connection with the client");
return;
}
- if (JB_ERR_OK != process_encrypted_request(csp))
+ if (JB_ERR_OK != process_encrypted_request_headers(csp))
{
close_client_ssl_connection(csp);
return;
@@ -4338,13 +4348,14 @@ static void chat(struct client_state *csp)
}
#endif
+ log_applied_actions(csp->action);
+
/* decide how to route the HTTP request */
fwd = forward_url(csp, http);
freez(csp->headers->first->str);
build_request_line(csp, fwd, &csp->headers->first->str);
- log_applied_actions(csp->action);
if (fwd->forward_host)
{
log_error(LOG_LEVEL_CONNECT, "via [%s]:%d to: %s",
@@ -5821,15 +5832,18 @@ static jb_socket bind_port_helper(const char *haddr, int hport, int backlog)
"can't bind to %s:%d: There may be another Privoxy "
"or some other proxy running on port %d",
bind_address, hport, hport);
+ exit(-1);
case -2:
log_error(LOG_LEVEL_FATAL,
"can't bind to %s:%d: The hostname is not resolvable",
bind_address, hport);
+ exit(-1);
default:
log_error(LOG_LEVEL_FATAL, "can't bind to %s:%d: %E",
bind_address, hport);
+ exit(-1);
}
/* shouldn't get here */
@@ -6269,6 +6283,8 @@ static void listen_loop(void)
log_error(LOG_LEVEL_INFO, "Graceful termination requested.");
+ close_ports_helper(bfds);
+
unload_current_config_file();
unload_current_actions_file();
unload_current_re_filterfile();