projects
/
privoxy.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Terminate the body of the HTTP snipplets with a single new line instead of \r\n
[privoxy.git]
/
jcc.c
diff --git
a/jcc.c
b/jcc.c
index
a805f0b
..
c1a3a6e
100644
(file)
--- a/
jcc.c
+++ b/
jcc.c
@@
-228,64
+228,64
@@
static const char CHEADER[] =
"HTTP/1.1 400 Invalid header received from client\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
"HTTP/1.1 400 Invalid header received from client\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
- "Invalid header received from client.\
r\
n";
+ "Invalid header received from client.\n";
static const char FTP_RESPONSE[] =
"HTTP/1.1 400 Invalid request received from client\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
static const char FTP_RESPONSE[] =
"HTTP/1.1 400 Invalid request received from client\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
- "Invalid request. Privoxy doesn't support FTP.\
r\
n";
+ "Invalid request. Privoxy doesn't support FTP.\n";
static const char GOPHER_RESPONSE[] =
"HTTP/1.1 400 Invalid request received from client\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
static const char GOPHER_RESPONSE[] =
"HTTP/1.1 400 Invalid request received from client\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
- "Invalid request. Privoxy doesn't support gopher.\
r\
n";
+ "Invalid request. Privoxy doesn't support gopher.\n";
/* XXX: should be a template */
static const char MISSING_DESTINATION_RESPONSE[] =
"HTTP/1.1 400 Bad request received from client\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
/* XXX: should be a template */
static const char MISSING_DESTINATION_RESPONSE[] =
"HTTP/1.1 400 Bad request received from client\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
- "Bad request. Privoxy was unable to extract the destination.\
r\
n";
+ "Bad request. Privoxy was unable to extract the destination.\n";
/* XXX: should be a template */
static const char INVALID_SERVER_HEADERS_RESPONSE[] =
"HTTP/1.1 502 Server or forwarder response invalid\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
/* XXX: should be a template */
static const char INVALID_SERVER_HEADERS_RESPONSE[] =
"HTTP/1.1 502 Server or forwarder response invalid\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
- "Bad response. The server or forwarder response doesn't look like HTTP.\
r\
n";
+ "Bad response. The server or forwarder response doesn't look like HTTP.\n";
/* XXX: should be a template */
static const char MESSED_UP_REQUEST_RESPONSE[] =
"HTTP/1.1 400 Malformed request after rewriting\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
/* XXX: should be a template */
static const char MESSED_UP_REQUEST_RESPONSE[] =
"HTTP/1.1 400 Malformed request after rewriting\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
- "Bad request. Messed up with header filters.\
r\
n";
+ "Bad request. Messed up with header filters.\n";
static const char TOO_MANY_CONNECTIONS_RESPONSE[] =
"HTTP/1.1 503 Too many open connections\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
static const char TOO_MANY_CONNECTIONS_RESPONSE[] =
"HTTP/1.1 503 Too many open connections\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
- "Maximum number of open connections reached.\
r\
n";
+ "Maximum number of open connections reached.\n";
static const char CLIENT_CONNECTION_TIMEOUT_RESPONSE[] =
"HTTP/1.1 504 Connection timeout\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
static const char CLIENT_CONNECTION_TIMEOUT_RESPONSE[] =
"HTTP/1.1 504 Connection timeout\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
- "The connection timed out because the client request didn't arrive in time.\
r\
n";
+ "The connection timed out because the client request didn't arrive in time.\n";
static const char CLIENT_BODY_PARSE_ERROR_RESPONSE[] =
"HTTP/1.1 400 Failed reading client body\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
static const char CLIENT_BODY_PARSE_ERROR_RESPONSE[] =
"HTTP/1.1 400 Failed reading client body\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
- "Failed parsing or buffering the chunk-encoded client body.\
r\
n";
+ "Failed parsing or buffering the chunk-encoded client body.\n";
static const char UNSUPPORTED_CLIENT_EXPECTATION_ERROR_RESPONSE[] =
"HTTP/1.1 417 Expecting too much\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
static const char UNSUPPORTED_CLIENT_EXPECTATION_ERROR_RESPONSE[] =
"HTTP/1.1 417 Expecting too much\r\n"
"Content-Type: text/plain\r\n"
"Connection: close\r\n\r\n"
- "Privoxy detected an unsupported Expect header value.\
r\
n";
+ "Privoxy detected an unsupported Expect header value.\n";
/* A function to crunch a response */
typedef struct http_response *(*crunch_func_ptr)(struct client_state *);
/* A function to crunch a response */
typedef struct http_response *(*crunch_func_ptr)(struct client_state *);
@@
-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!
*/
* 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;
}
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)
{
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))
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.
*
* elsewhere failed or Privoxy is configured
* to only accept proxy requests.
*
- * An error response has already been sen
d
+ * An error response has already been sen
t
* and we're done here.
*/
return JB_ERR_PARSE;
* and we're done here.
*/
return JB_ERR_PARSE;
@@
-2032,7
+2034,7
@@
static int read_http_request_body(struct client_state *csp)
size_t max_bytes_to_read = to_read < sizeof(buf) ? to_read : sizeof(buf);
log_error(LOG_LEVEL_CONNECT,
size_t max_bytes_to_read = to_read < sizeof(buf) ? to_read : sizeof(buf);
log_error(LOG_LEVEL_CONNECT,
- "Waiting for up to %
d
bytes of request body from the client.",
+ "Waiting for up to %
lu
bytes of request body from the client.",
max_bytes_to_read);
len = read_socket(csp->cfd, buf, (int)max_bytes_to_read);
if (len <= -1)
max_bytes_to_read);
len = read_socket(csp->cfd, buf, (int)max_bytes_to_read);
if (len <= -1)
@@
-2049,11
+2051,11
@@
static int read_http_request_body(struct client_state *csp)
if (to_read != 0)
{
if (to_read != 0)
{
- log_error(LOG_LEVEL_CONNECT, "Not enough request body has been read: expected %
d
more bytes",
+ log_error(LOG_LEVEL_CONNECT, "Not enough request body has been read: expected %
llu
more bytes",
csp->expected_client_content_length);
return 1;
}
csp->expected_client_content_length);
return 1;
}
- log_error(LOG_LEVEL_CONNECT, "The last %
d
bytes of the request body have been read",
+ log_error(LOG_LEVEL_CONNECT, "The last %
llu
bytes of the request body have been read",
csp->expected_client_content_length);
return 0;
}
csp->expected_client_content_length);
return 0;
}
@@
-2126,8
+2128,8
@@
static int can_filter_request_body(const struct client_state *csp)
csp->expected_client_content_length))
{
log_error(LOG_LEVEL_INFO,
csp->expected_client_content_length))
{
log_error(LOG_LEVEL_INFO,
- "Not filtering request body from %s: buffer limit %
d
will be exceeded "
- "(content length %
d
)", csp->ip_addr_str, csp->config->buffer_limit,
+ "Not filtering request body from %s: buffer limit %
lu
will be exceeded "
+ "(content length %
lluu
)", csp->ip_addr_str, csp->config->buffer_limit,
csp->expected_client_content_length);
return FALSE;
}
csp->expected_client_content_length);
return FALSE;
}
@@
-2259,7
+2261,7
@@
static int read_https_request_body(struct client_state *csp)
size_t max_bytes_to_read = to_read < sizeof(buf) ? to_read : sizeof(buf);
log_error(LOG_LEVEL_CONNECT,
size_t max_bytes_to_read = to_read < sizeof(buf) ? to_read : sizeof(buf);
log_error(LOG_LEVEL_CONNECT,
- "Waiting for up to %
d
bytes of request body from the client.",
+ "Waiting for up to %
lu
bytes of request body from the client.",
max_bytes_to_read);
len = ssl_recv_data(&(csp->ssl_client_attr), buf,
(unsigned)max_bytes_to_read);
max_bytes_to_read);
len = ssl_recv_data(&(csp->ssl_client_attr), buf,
(unsigned)max_bytes_to_read);
@@
-2277,11
+2279,14
@@
static int read_https_request_body(struct client_state *csp)
if (to_read != 0)
{
if (to_read != 0)
{
- log_error(LOG_LEVEL_CONNECT, "Not enough request body has been read: expected %d more bytes", to_read);
+ log_error(LOG_LEVEL_CONNECT,
+ "Not enough request body has been read: expected %lu more bytes",
+ to_read);
return 1;
}
return 1;
}
- log_error(LOG_LEVEL_CONNECT, "The last %d bytes of the request body have been read",
+ log_error(LOG_LEVEL_CONNECT,
+ "The last %llu bytes of the request body have been read",
csp->expected_client_content_length);
return 0;
}
csp->expected_client_content_length);
return 0;
}
@@
-2905,6
+2910,7
@@
static void continue_https_chat(struct client_state *csp)
if (JB_ERR_OK != process_encrypted_request(csp))
{
if (JB_ERR_OK != process_encrypted_request(csp))
{
+ csp->flags &= ~CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE;
return;
}
return;
}
@@
-3939,8
+3945,8
@@
static void handle_established_connection(struct client_state *csp)
if ((ssl_send_data_delayed(&(csp->ssl_client_attr),
(const unsigned char *)hdr, strlen(hdr),
get_write_delay(csp)) < 0)
if ((ssl_send_data_delayed(&(csp->ssl_client_attr),
(const unsigned char *)hdr, strlen(hdr),
get_write_delay(csp)) < 0)
- || (len = ssl_flush_socket(&(csp->ssl_client_attr),
- csp->iob) < 0))
+ || (
(
len = ssl_flush_socket(&(csp->ssl_client_attr),
+ csp->iob)
)
< 0))
{
log_error(LOG_LEVEL_CONNECT, "Write header to client failed");
{
log_error(LOG_LEVEL_CONNECT, "Write header to client failed");
@@
-6182,14
+6188,9
@@
static void listen_loop(void)
/* NOTREACHED unless FEATURE_GRACEFUL_TERMINATION is defined */
/* 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
#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();
unload_current_config_file();
unload_current_actions_file();
@@
-6209,7
+6210,8
@@
static void listen_loop(void)
if (i <= 0)
{
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();
}
}
sweep();
@@
-6219,6
+6221,19
@@
static void listen_loop(void)
freez(basedir);
#endif
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();
#if defined(_WIN32) && !defined(_WIN_CONSOLE)
/* Cleanup - remove taskbar icon etc. */
TermLogWindow();