X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=loaders.c;h=24b43d1b942d4716f7873ada4b2edebf3532001d;hp=9f3433128e905786daa526f5f1f017a687e04932;hb=f5d6e754e859b3ca0345ed124249a2e482ea29ac;hpb=1a14f999c1e810ffdf5c29fdbacb31161afd1b36 diff --git a/loaders.c b/loaders.c index 9f343312..24b43d1b 100644 --- a/loaders.c +++ b/loaders.c @@ -1,4 +1,4 @@ -const char loaders_rcs[] = "$Id: loaders.c,v 1.14 2001/06/01 03:27:04 oes Exp $"; +const char loaders_rcs[] = "$Id: loaders.c,v 1.26 2001/09/22 14:05:22 jongfoster Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/loaders.c,v $ @@ -35,6 +35,53 @@ const char loaders_rcs[] = "$Id: loaders.c,v 1.14 2001/06/01 03:27:04 oes Exp $" * * Revisions : * $Log: loaders.c,v $ + * Revision 1.26 2001/09/22 14:05:22 jongfoster + * Bugfix: Multiple escaped "#" characters in a configuration + * file are now permitted. + * Also removing 3 unused headers. + * + * Revision 1.25 2001/09/13 22:44:03 jongfoster + * Adding {} to an if statement + * + * Revision 1.24 2001/07/30 22:08:36 jongfoster + * Tidying up #defines: + * - All feature #defines are now of the form FEATURE_xxx + * - Permanently turned off WIN_GUI_EDIT + * - Permanently turned on WEBDAV and SPLIT_PROXY_ARGS + * + * Revision 1.23 2001/07/20 15:51:54 oes + * Fixed indentation of prepocessor commands + * + * 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. + * Cosmetic: Moving unloader funcs next to their + * respective loader funcs + * * Revision 1.14 2001/06/01 03:27:04 oes * Fixed line continuation problem * @@ -142,21 +189,13 @@ const char loaders_rcs[] = "$Id: loaders.c,v 1.14 2001/06/01 03:27:04 oes Exp $" #include "project.h" #include "list.h" #include "loaders.h" -#include "encode.h" #include "filters.h" #include "parsers.h" #include "jcc.h" -#include "ssplit.h" #include "miscutil.h" #include "errlog.h" -#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 @@ -174,13 +213,12 @@ const char loaders_h_rcs[] = LOADERS_H_VERSION; * These are also entered in the main linked list of files. */ -#ifdef TRUST_FILES +#ifdef FEATURE_TRUST static struct file_list *current_trustfile = NULL; -#endif /* def TRUST_FILES */ +#endif /* def FEATURE_TRUST */ -#ifdef PCRS static struct file_list *current_re_filterfile = NULL; -#endif /* def PCRS */ + /********************************************************************* @@ -236,49 +274,61 @@ void sweep(void) 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 +#ifdef FEATURE_TRUST if (ncsp->tlist) /* trust files */ { ncsp->tlist->active = 1; } -#endif /* def TRUST_FILES */ +#endif /* def FEATURE_TRUST */ } 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); -#ifdef TRUST_FILES - 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); - -#ifdef STATISTICS - urls_read++; - if (ncsp->rejected) + while( !ncsp->active ) { - urls_rejected++; + 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_read++; + if (ncsp->rejected) + { + urls_rejected++; + } +#endif /* def FEATURE_STATISTICS */ + + freez(ncsp); + + /* are there any more in sequence after it? */ + if( !(ncsp = csp->next) ) + break; } -#endif /* def STATISTICS */ - - freez(ncsp); } } @@ -290,10 +340,6 @@ void sweep(void) (nfl->unloader)(nfl->f); -#ifndef SPLIT_PROXY_ARGS - freez(nfl->proxy_args); -#endif /* ndef SPLIT_PROXY_ARGS */ - freez(nfl->filename); freez(nfl); @@ -359,7 +405,7 @@ int create_url_spec(struct url_spec * url, char * buf) if (url->path) { int errcode; - char rebuf[BUFSIZ]; + char rebuf[BUFFER_SIZE]; if (NULL == (url->preg = zalloc(sizeof(*url->preg)))) { @@ -374,14 +420,13 @@ int create_url_spec(struct url_spec * url, char * buf) (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); @@ -420,6 +465,7 @@ int create_url_spec(struct url_spec * url, char * buf) url->unanchored = tmp_url->unanchored; return 0; /* OK */ + } @@ -475,10 +521,7 @@ void free_url(struct url_spec *url) * This will be set to NULL, OR a struct * file_list newly allocated on the * heap, with the filename and lastmodified - * fields filled, standard header giving file - * name in proxy_args, and all others zeroed. - * (proxy_args is only filled in if !defined - * SPLIT_PROXY_ARGS and !suppress_blocklists). + * fields filled, and all others zeroed. * * Returns : If file unchanged: 0 (and sets newfl == NULL) * If file changed: 1 and sets newfl != NULL @@ -525,24 +568,10 @@ int check_file_changed(const struct file_list * current, return 1; } -#ifndef SPLIT_PROXY_ARGS - if (!suppress_blocklists) - { - char * p = html_encode(filename); - if (p) - { - fs->proxy_args = strsav(fs->proxy_args, "

The file `"); - fs->proxy_args = strsav(fs->proxy_args, p); - fs->proxy_args = strsav(fs->proxy_args, - "' contains the following patterns

\n"); - freez(p); - } - fs->proxy_args = strsav(fs->proxy_args, "
");
-   }
-#endif /* ndef SPLIT_PROXY_ARGS */
 
    *newfl = fs;
    return 1;
+
 }
 
 
@@ -553,47 +582,37 @@ int check_file_changed(const struct file_list * current,
  * Description :  Read a single non-empty line from a file and return
  *                it.  Trims comments, leading and trailing whitespace
  *                and respects escaping of newline and comment char.
- *                Also writes the file to fs->proxy_args.
  *
  * Parameters  :
  *          1  :  buf = Buffer to use.
  *          2  :  buflen = Size of buffer in bytes.
  *          3  :  fp = File to read from
- *          4  :  fs = File will be written to fs->proxy_args.  May
- *                be NULL to disable this feature.
  *
  * Returns     :  NULL on EOF or error
  *                Otherwise, returns buf.
  *
  *********************************************************************/
-char *read_config_line(char *buf, int buflen, FILE *fp, struct file_list *fs)
+char *read_config_line(char *buf, int buflen, FILE *fp)
 {
-   char *p, *q;
-   char linebuf[BUFSIZ];
+   char *p;
+   char *src;
+   char *dest;
+   char linebuf[BUFFER_SIZE];
    int contflag = 0;
 
    *buf = '\0';
 
    while (fgets(linebuf, sizeof(linebuf), fp))
    {
-#ifndef SPLIT_PROXY_ARGS
-      if (fs && !suppress_blocklists)
-      {
-         char *html_line = html_encode(linebuf);
-         if (html_line != NULL)
-         {
-            fs->proxy_args = strsav(fs->proxy_args, html_line);
-            freez(html_line);
-         }
-         fs->proxy_args = strsav(fs->proxy_args, "
"); - } -#endif /* ndef SPLIT_PROXY_ARGS */ - /* Trim off newline */ if ((p = strpbrk(linebuf, "\r\n")) != NULL) { *p = '\0'; } + else + { + p = linebuf + strlen(linebuf); + } /* Line continuation? Trim escape and set flag. */ if ((p != linebuf) && (*--p == '\\')) @@ -603,13 +622,19 @@ char *read_config_line(char *buf, int buflen, FILE *fp, struct file_list *fs) } /* If there's a comment char.. */ - if ((p = strpbrk(linebuf, "#")) != NULL) + p = linebuf; + while ((p = strchr(p, '#')) != NULL) { /* ..and it's escaped, left-shift the line over the escape. */ if ((p != linebuf) && (*(p-1) == '\\')) { - q = p-1; - while ((*q++ = *p++) != '\0') /* nop */; + src = p; + dest = p - 1; + while ((*dest++ = *src++) != '\0') + { + /* nop */ + } + /* Now scan from just after the "#". */ } /* Else, chop off the rest of the line */ else @@ -628,7 +653,7 @@ char *read_config_line(char *buf, int buflen, FILE *fp, struct file_list *fs) if (contflag) { contflag = 0; - continue; + continue; } /* Remove leading and trailing whitespace */ @@ -646,7 +671,7 @@ char *read_config_line(char *buf, int buflen, FILE *fp, struct file_list *fs) } -#ifdef TRUST_FILES +#ifdef FEATURE_TRUST /********************************************************************* * * Function : unload_trustfile @@ -664,7 +689,7 @@ static void unload_trustfile(void *f) 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); @@ -692,7 +717,7 @@ int load_trustfile(struct client_state *csp) struct block_spec *b, *bl; struct url_spec **tl; - char buf[BUFSIZ], *p, *q; + char buf[BUFFER_SIZE], *p, *q; int reject, trusted; struct file_list *fs; @@ -723,7 +748,7 @@ int load_trustfile(struct client_state *csp) tl = csp->config->trust_list; - while (read_config_line(buf, sizeof(buf), fp, fs) != NULL) + while (read_config_line(buf, sizeof(buf), fp) != NULL) { trusted = 0; reject = 1; @@ -784,13 +809,6 @@ int load_trustfile(struct client_state *csp) fclose(fp); -#ifndef SPLIT_PROXY_ARGS - if (!suppress_blocklists) - { - fs->proxy_args = strsav(fs->proxy_args, "
"); - } -#endif /* ndef SPLIT_PROXY_ARGS */ - /* the old one is now obsolete */ if (current_trustfile) { @@ -814,10 +832,9 @@ load_trustfile_error: return(-1); } -#endif /* def TRUST_FILES */ +#endif /* def FEATURE_TRUST */ -#ifdef PCRS /********************************************************************* * * Function : unload_re_filterfile @@ -832,18 +849,18 @@ load_trustfile_error: *********************************************************************/ static void unload_re_filterfile(void *f) { - pcrs_job *joblist; struct re_filterfile_spec *b = (struct re_filterfile_spec *)f; - if (b == NULL) return; + 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; } /********************************************************************* @@ -867,7 +884,7 @@ int load_re_filterfile(struct client_state *csp) struct re_filterfile_spec *bl; struct file_list *fs; - char buf[BUFSIZ]; + char buf[BUFFER_SIZE]; int error; pcrs_job *dummy; @@ -898,12 +915,12 @@ int load_re_filterfile(struct client_state *csp) } /* Read line by line */ - while (read_config_line(buf, sizeof(buf), fp, fs) != NULL) + while (read_config_line(buf, sizeof(buf), fp) != NULL) { 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); @@ -919,13 +936,6 @@ int load_re_filterfile(struct client_state *csp) fclose(fp); -#ifndef SPLIT_PROXY_ARGS - if (!suppress_blocklists) - { - fs->proxy_args = strsav(fs->proxy_args, ""); - } -#endif /* ndef SPLIT_PROXY_ARGS */ - /* the old one is now obsolete */ if ( NULL != current_re_filterfile ) { @@ -949,7 +959,6 @@ load_re_filterfile_error: return(-1); } -#endif /* def PCRS */ /*********************************************************************