Updating
[privoxy.git] / jcc.c
diff --git a/jcc.c b/jcc.c
index 49bb5e8..bd33037 100644 (file)
--- a/jcc.c
+++ b/jcc.c
@@ -1,4 +1,4 @@
-const char jcc_rcs[] = "$Id: jcc.c,v 1.92.2.6 2003/03/11 11:55:00 oes Exp $";
+const char jcc_rcs[] = "$Id: jcc.c,v 1.92.2.11 2003/05/14 12:32:02 oes Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/Attic/jcc.c,v $
@@ -33,6 +33,23 @@ const char jcc_rcs[] = "$Id: jcc.c,v 1.92.2.6 2003/03/11 11:55:00 oes Exp $";
  *
  * Revisions   :
  *    $Log: jcc.c,v $
+ *    Revision 1.92.2.11  2003/05/14 12:32:02  oes
+ *    Close jarfile on graceful exit, remove stray line
+ *
+ *    Revision 1.92.2.10  2003/05/08 15:13:46  oes
+ *    Cosmetics: Killed a warning, a typo and an allocation left at exit
+ *
+ *    Revision 1.92.2.9  2003/04/03 15:08:42  oes
+ *    No longer rely on non-POSIX.1 extensions of getcwd().
+ *    Fixes bug #711001
+ *
+ *    Revision 1.92.2.8  2003/03/31 13:12:32  oes
+ *    Replaced setenv() by posix-compliant putenv()
+ *    Thanks to Neil McCalden (nmcc AT users.sf.net).
+ *
+ *    Revision 1.92.2.7  2003/03/17 16:48:59  oes
+ *    Added chroot ability, thanks to patch by Sviatoslav Sviridov
+ *
  *    Revision 1.92.2.6  2003/03/11 11:55:00  oes
  *    Clean-up and extension of improvements for forked mode:
  *     - Child's return code now consists of flags RC_FLAG_*
@@ -696,7 +713,7 @@ pthread_mutex_t gethostbyname_mutex;
 #endif /* def OSX_DARWIN */
 
 #if defined(unix) || defined(__EMX__)
-const char *basedir;
+const char *basedir = NULL;
 const char *pidfile = NULL;
 int received_hup_signal = 0;
 #endif /* defined unix */
@@ -1468,7 +1485,7 @@ static void chat(struct client_state *csp)
 
                   if (write_socket(csp->cfd, hdr, hdrlen)
                    || ((flushed = flush_socket(csp->cfd, csp)) < 0)
-                   || (write_socket(csp->cfd, buf, len)))
+                   || (write_socket(csp->cfd, buf, (size_t) len)))
                   {
                      log_error(LOG_LEVEL_CONNECT, "Flush header and buffers to client failed: %E");
 
@@ -1849,16 +1866,17 @@ int main(int argc, const char *argv[])
 #if defined(unix)
    if ( *configfile != '/' )
    {
-      char *abs_file;
+      char *abs_file, cwd[1024];
 
       /* make config-filename absolute here */
-      if ( !(basedir = getcwd( NULL, 1024 )))
+      if ( !(getcwd(cwd, sizeof(cwd))))
       {
          perror("get working dir failed");
          exit( 1 );
       }
 
-      if ( !(abs_file = malloc( strlen( basedir ) + strlen( configfile ) + 5 )))
+      if (!(basedir = strdup(cwd))
+      || (!(abs_file = malloc( strlen( basedir ) + strlen( configfile ) + 5 ))))
       {
          perror("malloc failed");
          exit( 1 );
@@ -1895,14 +1913,13 @@ int main(int argc, const char *argv[])
     *
     * Catch the abort, interrupt and terminate signals for a graceful exit
     * Catch the hangup signal so the errlog can be reopened.
-    * Ignore the broken pipe and child signals
-    *  FIXME: Isn't ignoring the default for SIGCHLD anyway and why ignore SIGPIPE? 
+    * Ignore the broken pipe signals (FIXME: Why?)
     */
 #if !defined(_WIN32) && !defined(__OS2__) && !defined(AMIGA)
 {
    int idx;
    const int catched_signals[] = { SIGABRT, SIGTERM, SIGINT, SIGHUP, 0 };
-   const int ignored_signals[] = { SIGPIPE, SIGCHLD, 0 };
+   const int ignored_signals[] = { SIGPIPE, 0 };
 
    for (idx = 0; catched_signals[idx] != 0; idx++)
    {
@@ -2035,13 +2052,18 @@ int main(int argc, const char *argv[])
       }
       if (do_chroot)
       {
-         if (setenv ("HOME", "/", 1) < 0)
+         char putenv_dummy[64];
+
+         strcpy(putenv_dummy, "HOME=/");
+         if (putenv(putenv_dummy) != 0)
          {
-            log_error(LOG_LEVEL_FATAL, "Cannot setenv(): HOME");
-         }
-         if (setenv ("USER", pw->pw_name, 1) < 0)
+            log_error(LOG_LEVEL_FATAL, "Cannot putenv(): HOME");
+         }                
+
+         snprintf(putenv_dummy, 64, "USER=%s", pw->pw_name);
+         if (putenv(putenv_dummy) != 0)
          {
-            log_error(LOG_LEVEL_FATAL, "Cannot setenv(): USER");
+            log_error(LOG_LEVEL_FATAL, "Cannot putenv(): USER");
          }
       }
    }
@@ -2369,7 +2391,7 @@ static void listen_loop(void)
             serve(csp);
 
             /* 
-             * If we've been toggled or we'be blocked the request, tell Mom
+             * If we've been toggled or we've blocked the request, tell Mom
              */
 
 #ifdef FEATURE_TOGGLE
@@ -2482,8 +2504,17 @@ static void listen_loop(void)
    sweep();
 
 #if defined(unix)
-   free(basedir);
+   freez(basedir);
 #endif
+   freez(configfile);
+
+#ifdef FEATURE_COOKIE_JAR
+   if (NULL != config->jar)
+   {
+      fclose(config->jar);
+   }
+#endif
+
 #if defined(_WIN32) && !defined(_WIN_CONSOLE)
    /* Cleanup - remove taskbar icon etc. */
    TermLogWindow();