X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=jcc.c;h=8c34236f7e2eb2d4502c1a770b739b178a166122;hp=ff390f1ae0fa4bc005ddbe7c1f45d3745fda0139;hb=a2f8296e90e9bc3c4e4fa50c9b42e3f12bce24ca;hpb=cd0f01742b2822c9e154e3a6394d6c0f3f53e793 diff --git a/jcc.c b/jcc.c index ff390f1a..8c34236f 100644 --- a/jcc.c +++ b/jcc.c @@ -376,7 +376,8 @@ static void sig_handler(int the_signal) * We shouldn't be here, unless we catch signals * in main() that we can't handle here! */ - log_error(LOG_LEVEL_FATAL, "sig_handler: exiting on unexpected signal %d", the_signal); + log_error(LOG_LEVEL_FATAL, + "sig_handler: exiting on unexpected signal %d", the_signal); } return; @@ -1552,7 +1553,8 @@ static jb_err receive_chunked_client_request_body(struct client_state *csp) len = read_socket(csp->cfd, buf, sizeof(buf) - 1); if (len <= 0) { - log_error(LOG_LEVEL_ERROR, "Read the client body failed: %E"); + log_error(LOG_LEVEL_ERROR, + "Reading the client body failed: %E"); break; } if (add_to_iob(csp->client_iob, csp->config->buffer_limit, buf, len)) @@ -1860,7 +1862,7 @@ static jb_err receive_client_request(struct client_state *csp) * elsewhere failed or Privoxy is configured * to only accept proxy requests. * - * An error response has already been send + * An error response has already been sent * and we're done here. */ return JB_ERR_PARSE; @@ -2556,6 +2558,7 @@ static jb_err change_encrypted_request_destination(struct client_state *csp) { jb_err err; char *original_host = csp->http->host; + int original_port = csp->http->port; log_error(LOG_LEVEL_REDIRECTS, "Rewrite detected: %s", csp->https_headers->first->str); @@ -2572,22 +2575,32 @@ static jb_err change_encrypted_request_destination(struct client_state *csp) if (csp->http->host == NULL) { + char port_string[10]; /* * The rewritten request line did not specify a host * which means we can use the original host specified * by the client. */ csp->http->host = original_host; + csp->http->port = original_port; log_error(LOG_LEVEL_REDIRECTS, "Keeping the original host: %s", csp->http->host); /* * If the rewritten request line didn't contain a host * it also didn't contain a port so we can reuse the host - * and set the port to 443. + * port. */ freez(csp->http->hostport); csp->http->hostport = strdup_or_die(csp->http->host); - csp->http->port = 443; + snprintf(port_string, sizeof(port_string), ":%d", original_port); + err = string_append(&csp->http->hostport, port_string); + if (err != JB_ERR_OK) + { + log_error(LOG_LEVEL_ERROR, "Failed to rebuild hostport: %s.", + jb_err_to_string(err)); + return err; + } + /* * While the request line didn't mention it, * we're https-inspecting and want to speak TLS @@ -6171,14 +6184,9 @@ static void listen_loop(void) /* NOTREACHED unless FEATURE_GRACEFUL_TERMINATION is defined */ -#ifdef FEATURE_HTTPS_INSPECTION - /* Clean up. Aim: free all memory (no leaks) */ - ssl_release(); -#endif - #ifdef FEATURE_GRACEFUL_TERMINATION - log_error(LOG_LEVEL_INFO, "Graceful termination requested"); + log_error(LOG_LEVEL_INFO, "Graceful termination requested."); unload_current_config_file(); unload_current_actions_file(); @@ -6198,7 +6206,8 @@ static void listen_loop(void) if (i <= 0) { - log_error(LOG_LEVEL_ERROR, "Graceful termination failed - still some live clients after 1 minute wait."); + log_error(LOG_LEVEL_ERROR, "Graceful termination failed " + "- still some live clients after 1 minute wait."); } } sweep(); @@ -6208,6 +6217,19 @@ static void listen_loop(void) freez(basedir); #endif +#ifdef FEATURE_HTTPS_INSPECTION + /* + * Only release TLS backed resources if there + * are no active connections left. + */ + if (clients->next == NULL) + { + ssl_release(); + } +#endif + + log_error(LOG_LEVEL_INFO, "Exiting gracefully."); + #if defined(_WIN32) && !defined(_WIN_CONSOLE) /* Cleanup - remove taskbar icon etc. */ TermLogWindow();