-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 $
*
* 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
#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.
{
/* 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;
* 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];
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)
goto load_aclfile_error;
}
- fp = fopen(aclfile, "r");
+ fp = fopen(csp->config->aclfile, "r");
if (fp == NULL)
{
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);
}
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)
goto load_blockfile_error;
}
- if ((fp = fopen(blockfile, "r")) == NULL)
+ if ((fp = fopen(csp->config->blockfile, "r")) == NULL)
{
goto load_blockfile_error;
}
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);
}
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)
goto load_imagefile_error;
}
- if ((fp = fopen(imagefile, "r")) == NULL)
+ if ((fp = fopen(csp->config->imagefile, "r")) == NULL)
{
goto load_imagefile_error;
}
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);
}
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)
goto load_permissions_error;
}
- if ((fp = fopen(permissions_file, "r")) == NULL)
+ if ((fp = fopen(csp->config->permissions_file, "r")) == NULL)
{
goto load_permissions_error;
}
*
* 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)
{
/* a lines containing only "special" chars sets default */
if (*buf == '\0')
{
- default_permissions = permissions;
+ csp->config->default_permissions = permissions;
continue;
}
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);
}
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)
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)
{
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);
}
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)
goto load_forwardfile_error;
}
- if ((fp = fopen(forwardfile, "r")) == NULL)
+ if ((fp = fopen(csp->config->forwardfile, "r")) == NULL)
{
goto load_forwardfile_error;
}
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);
}
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)
}
/* 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;
}
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);
}
* 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;
}
}
*
* 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.
*
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