-const char loaders_rcs[] = "$Id: loaders.c,v 1.15 2001/06/07 23:14:14 jongfoster Exp $";
+const char loaders_rcs[] = "$Id: loaders.c,v 1.22 2001/07/20 15:16:17 haroon Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/loaders.c,v $
*
* Revisions :
* $Log: loaders.c,v $
+ * Revision 1.22 2001/07/20 15:16:17 haroon
+ * - per Guy's suggestion, added a while loop in sweep() to catch not just
+ * the last inactive CSP but all other consecutive inactive CSPs after that
+ * as well
+ *
+ * Revision 1.21 2001/07/18 17:26:24 oes
+ * Changed to conform to new pcrs interface
+ *
+ * Revision 1.20 2001/07/17 13:07:01 oes
+ * Fixed segv when last line in config files
+ * lacked a terminating (\r)\n
+ *
+ * Revision 1.19 2001/07/13 14:01:54 oes
+ * Removed all #ifdef PCRS
+ *
+ * Revision 1.18 2001/06/29 21:45:41 oes
+ * Indentation, CRLF->LF, Tab-> Space
+ *
+ * Revision 1.17 2001/06/29 13:31:51 oes
+ * Various adaptions
+ *
+ * Revision 1.16 2001/06/09 10:55:28 jongfoster
+ * Changing BUFSIZ ==> BUFFER_SIZE
+ *
* Revision 1.15 2001/06/07 23:14:14 jongfoster
* Removing ACL and forward file loaders - these
* files have been merged into the config file.
#include "gateway.h"
#include "actions.h"
-#ifndef SPLIT_PROXY_ARGS
-/* For strsav */
-#include "showargs.h"
-#endif /* ndef SPLIT_PROXY_ARGS */
-
const char loaders_h_rcs[] = LOADERS_H_VERSION;
/* Fix a problem with Solaris. There should be no effect on other
static struct file_list *current_trustfile = NULL;
#endif /* def TRUST_FILES */
-#ifdef PCRS
static struct file_list *current_re_filterfile = NULL;
-#endif /* def PCRS */
+
/*********************************************************************
ncsp->actions_list->active = 1;
}
-#ifdef PCRS
- if (ncsp->rlist) /* perl re files */
+ if (ncsp->rlist) /* pcrsjob files */
{
ncsp->rlist->active = 1;
}
-#endif /* def PCRS */
#ifdef TRUST_FILES
if (ncsp->tlist) /* trust files */
}
else
+ /*
+ * this client is not active, release its resources
+ * and the ones of all inactive clients that might
+ * follow it
+ */
{
- /* this client one is not active, release its resources */
- csp->next = ncsp->next;
-
- freez(ncsp->ip_addr_str);
+ while( !ncsp->active )
+ {
+ csp->next = ncsp->next;
+
+ freez(ncsp->ip_addr_str);
+ freez(ncsp->my_ip_addr_str);
+ freez(ncsp->my_hostname);
+
#ifdef TRUST_FILES
- freez(ncsp->referrer);
+ freez(ncsp->referrer);
#endif /* def TRUST_FILES */
- freez(ncsp->x_forwarded);
- freez(ncsp->iob->buf);
-
- free_http_request(ncsp->http);
-
- destroy_list(ncsp->headers);
- destroy_list(ncsp->cookie_list);
-
- free_current_action(ncsp->action);
-
+ freez(ncsp->x_forwarded);
+ freez(ncsp->iob->buf);
+
+ free_http_request(ncsp->http);
+
+ destroy_list(ncsp->headers);
+ destroy_list(ncsp->cookie_list);
+
+ free_current_action(ncsp->action);
+
#ifdef STATISTICS
- urls_read++;
- if (ncsp->rejected)
- {
- urls_rejected++;
- }
+ urls_read++;
+ if (ncsp->rejected)
+ {
+ urls_rejected++;
+ }
#endif /* def STATISTICS */
-
- freez(ncsp);
+
+ freez(ncsp);
+
+ /* are there any more in sequence after it? */
+ if( !(ncsp = csp->next) )
+ break;
+ }
}
}
(REG_EXTENDED|REG_NOSUB|REG_ICASE));
if (errcode)
{
- size_t errlen =
- regerror(errcode,
- url->preg, buf, sizeof(buf));
+ size_t errlen = regerror(errcode,
+ url->preg, buf, sizeof(buf));
buf[errlen] = '\0';
log_error(LOG_LEVEL_ERROR, "error compiling %s: %s",
- url->spec, buf);
+ url->spec, buf);
freez(url->spec);
freez(url->path);
url->unanchored = tmp_url->unanchored;
return 0; /* OK */
+
}
*newfl = fs;
return 1;
+
}
{
*p = '\0';
}
+ else
+ {
+ p = linebuf + strlen(linebuf);
+ }
/* Line continuation? Trim escape and set flag. */
if ((p != linebuf) && (*--p == '\\'))
if (contflag)
{
contflag = 0;
- continue;
+ continue;
}
/* Remove leading and trailing whitespace */
struct block_spec *b = (struct block_spec *)f;
if (b == NULL) return;
- unload_trustfile(b->next);
+ unload_trustfile(b->next); /* Stack is cheap, isn't it? */
free_url(b->url);
#endif /* def TRUST_FILES */
-#ifdef PCRS
/*********************************************************************
*
* Function : unload_re_filterfile
*********************************************************************/
static void unload_re_filterfile(void *f)
{
- pcrs_job *joblist;
struct re_filterfile_spec *b = (struct re_filterfile_spec *)f;
if (b == NULL) return;
destroy_list(b->patterns);
-
- joblist = b->joblist;
- while ( NULL != (joblist = pcrs_free_job(joblist)) ) {}
-
+ pcrs_free_joblist(b->joblist);
freez(b);
+ return;
}
/*********************************************************************
enlist( bl->patterns, buf );
/* We have a meaningful line -> make it a job */
- if ((dummy = pcrs_make_job(buf, &error)) == NULL)
+ if ((dummy = pcrs_compile_command(buf, &error)) == NULL)
{
log_error(LOG_LEVEL_RE_FILTER,
"Adding re_filter job %s failed with error %d.", buf, error);
return(-1);
}
-#endif /* def PCRS */
/*********************************************************************