X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=jcc.c;h=509be632b3ca4c870900a8ec513ecd2414192878;hp=586576c59c392fd5478a04027a2470ef526cd2d1;hb=1f0947493651af17ffa466f03e0eec2e04dba1af;hpb=1e237cbecffa4e860cab488f3bf0928b1442f500 diff --git a/jcc.c b/jcc.c index 586576c5..509be632 100644 --- a/jcc.c +++ b/jcc.c @@ -1,4 +1,4 @@ -const char jcc_rcs[] = "$Id: jcc.c,v 1.217 2009/01/07 19:50:09 fabiankeil Exp $"; +const char jcc_rcs[] = "$Id: jcc.c,v 1.223 2009/02/09 21:21:16 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/jcc.c,v $ @@ -6,7 +6,7 @@ const char jcc_rcs[] = "$Id: jcc.c,v 1.217 2009/01/07 19:50:09 fabiankeil Exp $" * Purpose : Main file. Contains main() method, main loop, and * the main connection-handling function. * - * Copyright : Written by and Copyright (C) 2001-2008 the SourceForge + * Copyright : Written by and Copyright (C) 2001-2009 the SourceForge * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -33,6 +33,30 @@ const char jcc_rcs[] = "$Id: jcc.c,v 1.217 2009/01/07 19:50:09 fabiankeil Exp $" * * Revisions : * $Log: jcc.c,v $ + * Revision 1.223 2009/02/09 21:21:16 fabiankeil + * Now that init_log_module() is called earlier, call show_version() + * later on from main() directly so it doesn't get called for --help + * or --version. + * + * Revision 1.222 2009/02/08 12:56:51 fabiankeil + * Call initialize_mutexes() before init_log_module() again. + * Broken since r220, might be the cause of Lee's #2579448. + * + * Revision 1.221 2009/02/06 18:02:58 fabiankeil + * When dropping privileges, also give up membership in supplementary + * groups. Thanks to Matthias Drochner for reporting the problem, + * providing the initial patch and testing the final version. + * + * Revision 1.220 2009/02/04 18:29:07 fabiankeil + * Initialize the log module before parsing arguments. + * Thanks to Matthias Drochner for the report. + * + * Revision 1.219 2009/01/31 16:08:21 fabiankeil + * Remove redundant error check in receive_client_request(). + * + * Revision 1.218 2009/01/31 12:25:54 fabiankeil + * Flatten indentation in receive_client_request(). + * * Revision 1.217 2009/01/07 19:50:09 fabiankeil * - If the socket-timeout has been reached and the client * hasn't received any data yet, send an explanation before @@ -2290,18 +2314,15 @@ static jb_err receive_client_request(struct client_state *csp) #endif /* def FEATURE_FORCE_LOAD */ err = parse_http_request(req, http, csp); - if (JB_ERR_OK != err) - { - log_error(LOG_LEVEL_ERROR, "Couldn't parse request: %s.", jb_err_to_string(err)); - } freez(req); - - if (http->cmd == NULL) + if (JB_ERR_OK != err) { write_socket(csp->cfd, CHEADER, strlen(CHEADER)); /* XXX: Use correct size */ log_error(LOG_LEVEL_CLF, "%s - - [%T] \"Invalid request\" 400 0", csp->ip_addr_str); - log_error(LOG_LEVEL_ERROR, "Invalid header received from %s.", csp->ip_addr_str); + log_error(LOG_LEVEL_ERROR, + "Couldn't parse request line received from %s: %s", + csp->ip_addr_str, jb_err_to_string(err)); free_http_request(http); return JB_ERR_PARSE; @@ -2762,7 +2783,8 @@ static void chat(struct client_state *csp) if (n == 0) { - log_error(LOG_LEVEL_ERROR, "Didn't receive data in time."); + log_error(LOG_LEVEL_ERROR, + "Didn't receive data in time: %s", http->url); if ((byte_count == 0) && (http->ssl == 0)) { write_socket(csp->cfd, CONNECTION_TIMEOUT_RESPONSE, @@ -3564,6 +3586,12 @@ int main(int argc, const char *argv[]) #endif ; + /* Prepare mutexes if supported and necessary. */ + initialize_mutexes(); + + /* Enable logging until further notice. */ + init_log_module(); + /* * Parse the command line arguments * @@ -3675,6 +3703,8 @@ int main(int argc, const char *argv[]) } /* -END- while (more arguments) */ + show_version(Argv[0]); + #if defined(unix) if ( *configfile != '/' ) { @@ -3717,12 +3747,6 @@ int main(int argc, const char *argv[]) InitWin32(); #endif - /* 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); @@ -3856,6 +3880,17 @@ int main(int argc, const char *argv[]) { log_error(LOG_LEVEL_FATAL, "Cannot setgid(): Insufficient permissions."); } + if (NULL != grp) + { + if (setgroups(1, &grp->gr_gid)) + { + log_error(LOG_LEVEL_FATAL, "setgroups() failed: %E"); + } + } + else if (initgroups(pw->pw_name, pw->pw_gid)) + { + log_error(LOG_LEVEL_FATAL, "initgroups() failed: %E"); + } if (do_chroot) { if (!pw->pw_dir)