Automatic reloading of config file.
[privoxy.git] / loaders.c
index 8a24af2..3f481d8 100644 (file)
--- a/loaders.c
+++ b/loaders.c
@@ -1,4 +1,4 @@
-const char loaders_rcs[] = "$Id: loaders.c,v 1.5 2001/05/23 10:39:05 oes Exp $";
+const char loaders_rcs[] = "$Id: loaders.c,v 1.6 2001/05/23 12:27:33 oes Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/loaders.c,v $
@@ -35,6 +35,10 @@ const char loaders_rcs[] = "$Id: loaders.c,v 1.5 2001/05/23 10:39:05 oes Exp $";
  *
  * Revisions   :
  *    $Log: loaders.c,v $
+ *    Revision 1.6  2001/05/23 12:27:33  oes
+ *
+ *    Fixed ugly indentation of my last changes
+ *
  *    Revision 1.5  2001/05/23 10:39:05  oes
  *    - Added support for escaping the comment character
  *      in config files by a backslash
@@ -111,10 +115,6 @@ const char loaders_h_rcs[] = LOADERS_H_VERSION;
 #define ijb_isspace(__X) isspace((int)(unsigned char)(__X))
 
 
-#define NLOADERS 8
-static int (*loaders[NLOADERS])(struct client_state *);
-
-
 /*
  * Currently active files.
  * These are also entered in the main linked list of files.
@@ -184,6 +184,13 @@ void sweep(void)
       {
          /* mark this client's files as active */
 
+         /*
+          * Always have a configuration file.
+          * (Also note the slightly non-standard extra
+          * indirection here.)
+          */
+         ncsp->config->config_file_list->active = 1;
+
          if (ncsp->blist)     /* block files */
          {
             ncsp->blist->active = 1;
@@ -653,9 +660,9 @@ static void unload_re_filterfile(void *f)
  *                On error: 1 and sets newfl == NULL
  *
  *********************************************************************/
-static int check_file_changed(const struct file_list * current,
-                              const char * filename,
-                              struct file_list ** newfl)
+int check_file_changed(const struct file_list * current,
+                       const char * filename,
+                       struct file_list ** newfl)
 {
    struct file_list *fs;
    struct stat statbuf[1];
@@ -865,7 +872,7 @@ int load_aclfile(struct client_state *csp)
    struct access_control_list *a, *bl;
    struct file_list *fs;
 
-   if (!check_file_changed(current_aclfile, aclfile, &fs))
+   if (!check_file_changed(current_aclfile, csp->config->aclfile, &fs))
    {
       /* No need to load */
       if (csp)
@@ -887,7 +894,7 @@ int load_aclfile(struct client_state *csp)
       goto load_aclfile_error;
    }
 
-   fp = fopen(aclfile, "r");
+   fp = fopen(csp->config->aclfile, "r");
 
    if (fp == NULL)
    {
@@ -974,7 +981,8 @@ int load_aclfile(struct client_state *csp)
    return(0);
 
 load_aclfile_error:
-   log_error(LOG_LEVEL_ERROR, "can't load access control list %s: %E", aclfile);
+   log_error(LOG_LEVEL_ERROR, "can't load access control list %s: %E",
+             csp->config->aclfile);
    return(-1);
 
 }
@@ -1002,7 +1010,7 @@ int load_blockfile(struct client_state *csp)
    int reject;
    struct file_list *fs;
 
-   if (!check_file_changed(current_blockfile, blockfile, &fs))
+   if (!check_file_changed(current_blockfile, csp->config->blockfile, &fs))
    {
       /* No need to load */
       if (csp)
@@ -1022,7 +1030,7 @@ int load_blockfile(struct client_state *csp)
       goto load_blockfile_error;
    }
 
-   if ((fp = fopen(blockfile, "r")) == NULL)
+   if ((fp = fopen(csp->config->blockfile, "r")) == NULL)
    {
       goto load_blockfile_error;
    }
@@ -1096,7 +1104,7 @@ int load_blockfile(struct client_state *csp)
    return(0);
 
 load_blockfile_error:
-   log_error(LOG_LEVEL_ERROR, "can't load blockfile '%s': %E", blockfile);
+   log_error(LOG_LEVEL_ERROR, "can't load blockfile '%s': %E", csp->config->blockfile);
    return(-1);
 
 }
@@ -1124,7 +1132,7 @@ int load_imagefile(struct client_state *csp)
    int reject;
    struct file_list *fs;
 
-   if (!check_file_changed(current_imagefile, imagefile, &fs))
+   if (!check_file_changed(current_imagefile, csp->config->imagefile, &fs))
    {
       /* No need to load */
       if (csp)
@@ -1144,7 +1152,7 @@ int load_imagefile(struct client_state *csp)
       goto load_imagefile_error;
    }
 
-   if ((fp = fopen(imagefile, "r")) == NULL)
+   if ((fp = fopen(csp->config->imagefile, "r")) == NULL)
    {
       goto load_imagefile_error;
    }
@@ -1218,7 +1226,7 @@ int load_imagefile(struct client_state *csp)
    return(0);
 
 load_imagefile_error:
-   log_error(LOG_LEVEL_ERROR, "can't load imagefile '%s': %E", imagefile);
+   log_error(LOG_LEVEL_ERROR, "can't load imagefile '%s': %E", csp->config->imagefile);
    return(-1);
 
 }
@@ -1248,7 +1256,7 @@ int load_permissions_file(struct client_state *csp)
    struct file_list *fs;
    int i;
 
-   if (!check_file_changed(current_permissions_file, permissions_file, &fs))
+   if (!check_file_changed(current_permissions_file, csp->config->permissions_file, &fs))
    {
       /* No need to load */
       if (csp)
@@ -1268,7 +1276,7 @@ int load_permissions_file(struct client_state *csp)
       goto load_permissions_error;
    }
 
-   if ((fp = fopen(permissions_file, "r")) == NULL)
+   if ((fp = fopen(csp->config->permissions_file, "r")) == NULL)
    {
       goto load_permissions_error;
    }
@@ -1279,7 +1287,7 @@ int load_permissions_file(struct client_state *csp)
     *
     * Reset it to default first.
     */
-   default_permissions = PERMIT_RE_FILTER;
+   csp->config->default_permissions = PERMIT_RE_FILTER;
 
    while (read_config_line(buf, sizeof(buf), fp, fs) != NULL)
    {
@@ -1362,7 +1370,7 @@ int load_permissions_file(struct client_state *csp)
       /* a lines containing only "special" chars sets default */
       if (*buf == '\0')
       {
-         default_permissions = permissions;
+         csp->config->default_permissions = permissions;
          continue;
       }
 
@@ -1416,7 +1424,8 @@ int load_permissions_file(struct client_state *csp)
    return(0);
 
 load_permissions_error:
-   log_error(LOG_LEVEL_ERROR, "can't load permissions file '%s': %E", permissions_file);
+   log_error(LOG_LEVEL_ERROR, "can't load permissions file '%s': %E",
+             csp->config->permissions_file);
    return(-1);
 
 }
@@ -1446,7 +1455,7 @@ int load_trustfile(struct client_state *csp)
    int reject, trusted;
    struct file_list *fs;
 
-   if (!check_file_changed(current_trustfile, trustfile, &fs))
+   if (!check_file_changed(current_trustfile, csp->config->trustfile, &fs))
    {
       /* No need to load */
       if (csp)
@@ -1466,12 +1475,12 @@ int load_trustfile(struct client_state *csp)
       goto load_trustfile_error;
    }
 
-   if ((fp = fopen(trustfile, "r")) == NULL)
+   if ((fp = fopen(csp->config->trustfile, "r")) == NULL)
    {
       goto load_trustfile_error;
    }
 
-   tl = trust_list;
+   tl = csp->config->trust_list;
 
    while (read_config_line(buf, sizeof(buf), fp, fs) != NULL)
    {
@@ -1559,7 +1568,8 @@ int load_trustfile(struct client_state *csp)
    return(0);
 
 load_trustfile_error:
-   log_error(LOG_LEVEL_ERROR, "can't load trustfile '%s': %E", trustfile);
+   log_error(LOG_LEVEL_ERROR, "can't load trustfile '%s': %E",
+             csp->config->trustfile);
    return(-1);
 
 }
@@ -1590,7 +1600,7 @@ int load_forwardfile(struct client_state *csp)
    const struct gateway *gw;
    struct url_spec url[1];
 
-   if (!check_file_changed(current_forwardfile, forwardfile, &fs))
+   if (!check_file_changed(current_forwardfile, csp->config->forwardfile, &fs))
    {
       /* No need to load */
       if (csp)
@@ -1611,7 +1621,7 @@ int load_forwardfile(struct client_state *csp)
       goto load_forwardfile_error;
    }
 
-   if ((fp = fopen(forwardfile, "r")) == NULL)
+   if ((fp = fopen(csp->config->forwardfile, "r")) == NULL)
    {
       goto load_forwardfile_error;
    }
@@ -1828,7 +1838,8 @@ int load_forwardfile(struct client_state *csp)
    return(0);
 
 load_forwardfile_error:
-   log_error(LOG_LEVEL_ERROR, "can't load forwardfile '%s': %E", forwardfile);
+   log_error(LOG_LEVEL_ERROR, "can't load forwardfile '%s': %E",
+             csp->config->forwardfile);
    return(-1);
 
 }
@@ -1860,7 +1871,7 @@ int load_re_filterfile(struct client_state *csp)
    int error;
    pcrs_job *dummy;
 
-   if (!check_file_changed(current_re_filterfile, re_filterfile, &fs))
+   if (!check_file_changed(current_re_filterfile, csp->config->re_filterfile, &fs))
    {
       /* No need to load */
       if (csp)
@@ -1881,7 +1892,7 @@ int load_re_filterfile(struct client_state *csp)
    }
 
    /* Open the file or fail */
-   if ((fp = fopen(re_filterfile, "r")) == NULL)
+   if ((fp = fopen(csp->config->re_filterfile, "r")) == NULL)
    {
       goto load_re_filterfile_error;
    }
@@ -1933,7 +1944,8 @@ int load_re_filterfile(struct client_state *csp)
    return( 0 );
 
 load_re_filterfile_error:
-   log_error(LOG_LEVEL_ERROR, "can't load re_filterfile '%s': %E", re_filterfile);
+   log_error(LOG_LEVEL_ERROR, "can't load re_filterfile '%s': %E", 
+             csp->config->re_filterfile);
    return(-1);
 
 }
@@ -1950,19 +1962,21 @@ load_re_filterfile_error:
  * Parameters  :
  *          1  :  loader = pointer to a function that can parse and load
  *                the appropriate config file.
+ *          2  :  config = The configuration_spec to add the loader to.
  *
  * Returns     :  N/A
  *
  *********************************************************************/
-void add_loader(int (*loader)(struct client_state *))
+void add_loader(int (*loader)(struct client_state *), 
+                struct configuration_spec * config)
 {
    int i;
 
    for (i=0; i < NLOADERS; i++)
    {
-      if (loaders[i] == NULL)
+      if (config->loaders[i] == NULL)
       {
-         loaders[i] = loader;
+         config->loaders[i] = loader;
          break;
       }
    }
@@ -1981,6 +1995,8 @@ void add_loader(int (*loader)(struct client_state *))
  *
  * Parameters  :
  *          1  :  csp = Current client state (buffers, headers, etc...)
+ *                      Must be non-null.  Reads: "csp->config"
+ *                      Writes: various data members.
  *
  * Returns     :  0 => Ok, everything else is an error.
  *
@@ -1992,34 +2008,17 @@ int run_loader(struct client_state *csp)
 
    for (i=0; i < NLOADERS; i++)
    {
-      if (loaders[i] == NULL)
+      if (csp->config->loaders[i] == NULL)
       {
          break;
       }
-      ret |= (loaders[i])(csp);
+      ret |= (csp->config->loaders[i])(csp);
    }
    return(ret);
 
 }
 
 
-/*********************************************************************
- *
- * Function    :  remove_all_loaders
- *
- * Description :  Remove all loaders from the list.
- *
- * Parameters  :  N/A
- *
- * Returns     :  N/A
- *
- *********************************************************************/
-void remove_all_loaders(void)
-{
-   memset( loaders, 0, sizeof( loaders ) );
-}
-
-
 /*
   Local Variables:
   tab-width: 3