X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=jcc.c;h=03ee6f2f6a85cacd97a369218f0df67b7a5e1b3d;hp=86a3092b8d011c025db074a1014caa6fc723e260;hb=2f190a24b298322d5a9190bd7da38199a881b0f6;hpb=f00a27bae5b77921428d29e18dca7105fae46e3d diff --git a/jcc.c b/jcc.c index 86a3092b..03ee6f2f 100644 --- a/jcc.c +++ b/jcc.c @@ -1,4 +1,4 @@ -const char jcc_rcs[] = "$Id: jcc.c,v 1.154 2007/10/19 17:00:08 fabiankeil Exp $"; +const char jcc_rcs[] = "$Id: jcc.c,v 1.163 2007/12/13 01:47:11 david__schmidt Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/jcc.c,v $ @@ -33,6 +33,39 @@ const char jcc_rcs[] = "$Id: jcc.c,v 1.154 2007/10/19 17:00:08 fabiankeil Exp $" * * Revisions : * $Log: jcc.c,v $ + * Revision 1.163 2007/12/13 01:47:11 david__schmidt + * Make sure all console-mode apps get a usage() instance + * + * Revision 1.162 2007/12/06 17:54:57 fabiankeil + * Reword NO_SERVER_DATA_RESPONSE to make it harder + * to misunderstand what the message is all about. + * + * Revision 1.161 2007/12/04 19:44:22 fabiankeil + * Unbreak trustfile which previously didn't work without + * FEATURE_TOGGLE. Fixes BR#1843585, reported by Lee. + * + * Revision 1.160 2007/11/29 18:00:29 fabiankeil + * Plug memory leak. Spotted by Valgrind, triggered by + * Privoxy-Regression-Test feeding proxyfuzz.py. + * + * Revision 1.159 2007/11/24 14:34:09 fabiankeil + * In the HTTP snipplets, refer to the client as client. + * + * Revision 1.158 2007/11/11 16:44:17 fabiankeil + * Emit a log message when activating the MS IIS5 hack. + * + * Revision 1.157 2007/11/03 17:34:49 fabiankeil + * Log the "weak randomization factor" warning only + * once for mingw32 and provide some more details. + * + * Revision 1.156 2007/11/01 18:20:58 fabiankeil + * Initialize log module after initializing mutexes, future + * deadlocks in that code should now work cross-platform. + * + * Revision 1.155 2007/10/23 20:12:45 fabiankeil + * Fix first CSUCCEED line to end in \r\n as required by RFC1945. + * Reported by Bert van Leeuwen in BR#1818808. + * * Revision 1.154 2007/10/19 17:00:08 fabiankeil * Downgrade "Flushing header and buffers" message to LOG_LEVEL_INFO. * @@ -1027,7 +1060,7 @@ static void build_request_line(struct client_state *csp, const struct forward_sp static jb_err change_request_destination(struct client_state *csp); static void chat(struct client_state *csp); static void serve(struct client_state *csp); -#if defined(unix) +#if !defined(_WIN32) || defined(_WIN_CONSOLE) static void usage(const char *myname); #endif static void initialize_mutexes(void); @@ -1086,11 +1119,11 @@ static const char CSUCCEED[] = "Proxy-Agent: Privoxy/" VERSION "\r\n\r\n"; static const char CHEADER[] = - "HTTP/1.0 400 Invalid header received from browser\r\n" + "HTTP/1.0 400 Invalid header received from client\r\n" "Proxy-Agent: Privoxy " VERSION "\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n\r\n" - "Invalid header received from browser.\r\n"; + "Invalid header received from client.\r\n"; static const char CFORBIDDEN[] = "HTTP/1.0 403 Connection not allowable\r\n" @@ -1099,20 +1132,20 @@ static const char CFORBIDDEN[] = "Connection: close\r\n\r\n"; static const char FTP_RESPONSE[] = - "HTTP/1.0 400 Invalid request received from browser\r\n" + "HTTP/1.0 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"; static const char GOPHER_RESPONSE[] = - "HTTP/1.0 400 Invalid request received from browser\r\n" + "HTTP/1.0 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"; /* XXX: should be a template */ static const char MISSING_DESTINATION_RESPONSE[] = - "HTTP/1.0 400 Bad request received from browser\r\n" + "HTTP/1.0 400 Bad request received from client\r\n" "Proxy-Agent: Privoxy " VERSION "\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n\r\n" @@ -1125,12 +1158,12 @@ static const char NO_SERVER_DATA_RESPONSE[] = "Content-Type: text/plain\r\n" "Connection: close\r\n\r\n" "Empty server or forwarder response.\r\n" - "The connection was closed without sending any data.\r\n"; + "The connection has been closed but Privoxy didn't receive any data.\r\n"; #if 0 /* XXX: should be a template */ static const char NULL_BYTE_RESPONSE[] = - "HTTP/1.0 400 Bad request received from browser\r\n" + "HTTP/1.0 400 Bad request received from client\r\n" "Proxy-Agent: Privoxy " VERSION "\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n\r\n" @@ -1996,6 +2029,7 @@ static void chat(struct client_state *csp) if (len <= 0) { log_error(LOG_LEVEL_ERROR, "read from client failed: %E"); + destroy_list(headers); return; } @@ -2005,6 +2039,7 @@ static void chat(struct client_state *csp) */ if (add_to_iob(csp, buf, len)) { + destroy_list(headers); return; } continue; @@ -2034,7 +2069,7 @@ static void chat(struct client_state *csp) * An error response has already been send * and we're done here. */ - return; + return; } } @@ -2149,6 +2184,10 @@ static void chat(struct client_state *csp) || (csp->action->flags & ACTION_LIMIT_CONNECT && !match_portlist(csp->action->string[ACTION_STRING_LIMIT_CONNECT], csp->http->port)) ) { + const char *acceptable_connect_ports = + csp->action->string[ACTION_STRING_LIMIT_CONNECT] ? + csp->action->string[ACTION_STRING_LIMIT_CONNECT] : + "443 (implied default)"; if (csp->action->flags & ACTION_TREAT_FORBIDDEN_CONNECTS_LIKE_BLOCKS) { /* @@ -2160,8 +2199,7 @@ static void chat(struct client_state *csp) */ log_error(LOG_LEVEL_INFO, "Request from %s marked for blocking. " "limit-connect{%s} doesn't allow CONNECT requests to port %d.", - csp->ip_addr_str, csp->action->string[ACTION_STRING_LIMIT_CONNECT], - csp->http->port); + csp->ip_addr_str, acceptable_connect_ports, csp->http->port); csp->action->flags |= ACTION_BLOCK; http->ssl = 0; } @@ -2170,8 +2208,7 @@ static void chat(struct client_state *csp) write_socket(csp->cfd, CFORBIDDEN, strlen(CFORBIDDEN)); log_error(LOG_LEVEL_INFO, "Request from %s denied. " "limit-connect{%s} doesn't allow CONNECT requests to port %d.", - csp->ip_addr_str, csp->action->string[ACTION_STRING_LIMIT_CONNECT], - csp->http->port); + csp->ip_addr_str, acceptable_connect_ports, csp->http->port); assert(NULL != csp->http->ocmd); log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 403 0", csp->ip_addr_str, csp->http->ocmd); @@ -2509,6 +2546,9 @@ static void chat(struct client_state *csp) * This is NOT the body, so * Let's pretend the server just sent us a blank line. */ + log_error(LOG_LEVEL_INFO, + "Malformerd HTTP headers detected and MS IIS5 hack enabled. " + "Expect an invalid response or even no response at all."); snprintf(buf, sizeof(buf), "\r\n"); len = (int)strlen(buf); @@ -2805,7 +2845,7 @@ static int32 server_thread(void *data) #endif -#if defined(unix) +#if !defined(_WIN32) || defined(_WIN_CONSOLE) /********************************************************************* * * Function : usage @@ -2834,7 +2874,7 @@ static void usage(const char *myname) exit(2); } -#endif /* defined(unix) */ +#endif /* #if !defined(_WIN32) || defined(_WIN_CONSOLE) */ /********************************************************************* @@ -2953,8 +2993,6 @@ int main(int argc, const char *argv[]) #endif ; - init_log_module(Argv[0]); - /* * Parse the command line arguments * @@ -3101,6 +3139,7 @@ int main(int argc, const char *argv[]) files->next = NULL; clients->next = NULL; + /* XXX: factor out initialising after the next stable release. */ #ifdef AMIGA InitAmiga(); #elif defined(_WIN32) @@ -3110,9 +3149,21 @@ int main(int argc, const char *argv[]) /* Prepare mutexes if supported and necessary. */ initialize_mutexes(); + /* Enable logging until further notice. */ + init_log_module(Argv[0]); + random_seed = (unsigned int)time(NULL); #ifdef HAVE_RANDOM srandom(random_seed); +#elif defined (_WIN32) + /* + * See pick_from_range() in miscutil.c for details. + */ + log_error(LOG_LEVEL_INFO, + "No thread-safe PRNG implemented for your platform. " + "Using weak \'randomization\' factor which will " + "limit the already questionable usefulness of " + "header-time-randomizing actions (disabled by default)."); #else srand(random_seed); #endif /* ifdef HAVE_RANDOM */ @@ -3536,10 +3587,10 @@ static void listen_loop(void) #ifdef FEATURE_TOGGLE if (global_toggle_state) +#endif /* def FEATURE_TOGGLE */ { csp->flags |= CSP_FLAG_TOGGLED_ON; } -#endif /* def FEATURE_TOGGLE */ if (run_loader(csp)) {