-const char loaders_rcs[] = "$Id: loaders.c,v 1.28 2001/10/07 15:40:39 oes Exp $";
+const char loaders_rcs[] = "$Id: loaders.c,v 1.33 2001/11/13 00:16:38 jongfoster Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/loaders.c,v $
*
* Purpose : Functions to load and unload the various
* configuration files. Also contains code to manage
- * the list of active loaders, and to automatically
+ * the list of active loaders, and to automatically
* unload files that are no longer in use.
*
* Copyright : Written by and Copyright (C) 2001 the SourceForge
* IJBSWA team. http://ijbswa.sourceforge.net
*
* Based on the Internet Junkbuster originally written
- * by and Copyright (C) 1997 Anonymous Coders and
+ * by and Copyright (C) 1997 Anonymous Coders and
* Junkbusters Corporation. http://www.junkbusters.com
*
- * This program is free software; you can redistribute it
+ * This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General
* Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at
*
* Revisions :
* $Log: loaders.c,v $
+ * Revision 1.33 2001/11/13 00:16:38 jongfoster
+ * Replacing references to malloc.h with the standard stdlib.h
+ * (See ANSI or K&R 2nd Ed)
+ *
+ * Revision 1.32 2001/11/07 00:02:13 steudten
+ * Add line number in error output for lineparsing for
+ * actionsfile and configfile.
+ * Special handling for CLF added.
+ *
+ * Revision 1.31 2001/10/26 17:39:01 oes
+ * Removed csp->referrer
+ * Moved ijb_isspace and ijb_tolower to project.h
+ *
+ * Revision 1.30 2001/10/25 03:40:48 david__schmidt
+ * Change in porting tactics: OS/2's EMX porting layer doesn't allow multiple
+ * threads to call select() simultaneously. So, it's time to do a real, live,
+ * native OS/2 port. See defines for __EMX__ (the porting layer) vs. __OS2__
+ * (native). Both versions will work, but using __OS2__ offers multi-threading.
+ *
+ * Revision 1.29 2001/10/23 21:38:53 jongfoster
+ * Adding error-checking to create_url_spec()
+ *
* Revision 1.28 2001/10/07 15:40:39 oes
* Replaced 6 boolean members of csp with one bitmap (csp->flags)
*
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
-#include <malloc.h>
#include <errno.h>
#include <sys/stat.h>
#include <ctype.h>
#include <assert.h>
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(__OS2__)
#include <unistd.h>
#endif
const char loaders_h_rcs[] = LOADERS_H_VERSION;
-/* Fix a problem with Solaris. There should be no effect on other
- * platforms.
- * Solaris's isspace() is a macro which uses it's argument directly
- * as an array index. Therefore we need to make sure that high-bit
- * characters generate +ve values, and ideally we also want to make
- * the argument match the declared parameter type of "int".
- */
-#define ijb_isspace(__X) isspace((int)(unsigned char)(__X))
-
-
/*
* Currently active files.
* These are also entered in the main linked list of files.
}
else
- /*
- * this client is not active, release its resources
+ /*
+ * this client is not active, release its resources
* and the ones of all inactive clients that might
* follow it
*/
while (!(ncsp->flags & CSP_FLAG_ACTIVE))
{
csp->next = ncsp->next;
-
+
freez(ncsp->ip_addr_str);
freez(ncsp->my_ip_addr_str);
freez(ncsp->my_hostname);
-
-#ifdef FEATURE_TRUST
- freez(ncsp->referrer);
-#endif /* def FEATURE_TRUST */
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 FEATURE_STATISTICS
urls_rejected++;
}
#endif /* def FEATURE_STATISTICS */
-
+
freez(ncsp);
-
+
/* are there any more in sequence after it? */
if( !(ncsp = csp->next) )
break;
*
* Description : Helper function to check if a file needs reloading.
* If "current" is still current, return it. Otherwise
- * allocates a new (zeroed) "struct file_list", fills
+ * allocates a new (zeroed) "struct file_list", fills
* in the disk file name and timestamp, and returns it.
*
* Parameters :
* 1 : current = The file_list currently being used - will
- * be checked to see if it is out of date.
+ * be checked to see if it is out of date.
* May be NULL (which is treated as out of
* date).
* 2 : filename = Name of file to check.
&& (current->lastmodified == statbuf->st_mtime)
&& (0 == strcmp(current->filename, filename)))
{
- return 0;
+ /* force reload of configfile and all the logs */
+ if ( !MustReload ) return 0;
}
fs = (struct file_list *)zalloc(sizeof(struct file_list));
-
if (fs == NULL)
{
/* Out of memory error */
freez (fs);
return 1;
}
-
-
*newfl = fs;
return 1;
-
}
* 1 : buf = Buffer to use.
* 2 : buflen = Size of buffer in bytes.
* 3 : fp = File to read from
+ * 4 : linenum = linenumber in file
*
* Returns : NULL on EOF or error
* Otherwise, returns buf.
*
*********************************************************************/
-char *read_config_line(char *buf, int buflen, FILE *fp)
+char *read_config_line(char *buf, int buflen, FILE *fp, unsigned long *linenum)
{
char *p;
char *src;
while (fgets(linebuf, sizeof(linebuf), fp))
{
+ (*linenum)++;
/* Trim off newline */
if ((p = strpbrk(linebuf, "\r\n")) != NULL)
{
continue;
}
- /* Remove leading and trailing whitespace */
+ /* Remove leading and trailing whitespace */
chomp(buf);
if (*buf)
char buf[BUFFER_SIZE], *p, *q;
int reject, trusted;
struct file_list *fs;
+ unsigned long linenum = 0;
if (!check_file_changed(current_trustfile, csp->config->trustfile, &fs))
{
tl = csp->config->trust_list;
- while (read_config_line(buf, sizeof(buf), fp) != NULL)
+ while (read_config_line(buf, sizeof(buf), fp, &linenum) != NULL)
{
trusted = 0;
reject = 1;
char buf[BUFFER_SIZE];
int error;
+ unsigned long linenum = 0;
pcrs_job *dummy;
if (!check_file_changed(current_re_filterfile, csp->config->re_filterfile, &fs))
}
/* Read line by line */
- while (read_config_line(buf, sizeof(buf), fp) != NULL)
+ while (read_config_line(buf, sizeof(buf), fp, &linenum) != NULL)
{
enlist( bl->patterns, buf );
/* We have a meaningful line -> make it a job */
if ((dummy = pcrs_compile_command(buf, &error)) == NULL)
{
- log_error(LOG_LEVEL_RE_FILTER,
+ log_error(LOG_LEVEL_RE_FILTER,
"Adding re_filter job %s failed with error %d.", buf, error);
continue;
}
return( 0 );
load_re_filterfile_error:
- log_error(LOG_LEVEL_FATAL, "can't load re_filterfile '%s': %E",
+ log_error(LOG_LEVEL_FATAL, "can't load re_filterfile '%s': %E",
csp->config->re_filterfile);
return(-1);
* 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;