newscache: Thread: Re: Newcache PR


[<<] [<] Page 1 of 1 [>] [>>]
Subject: Re: Newcache PR
From: Tilman Linneweh ####@####.####
Date: 24 Nov 2003 16:47:49 -0000
Message-Id: <20031124162106.GN57652@huckfinn.arved.de>

Hello Konstantin,

Newscache is now maintained by Herbert Straub, the new project website is:
http://members.aon.at/hstraub/linux/newscache/
There is a Mailinglist ####@####.#### where I am forwarding your 
request.
Current version is 1.1.90, so I am not sure, if your patch still applies.

regards
arved

* Konstantin Nikonenko [Mon, Nov 24, 2003 at 05:15:26PM +0200]:
> Hello tom, arved,
> 
>   i'm patched newscache to add functionality in filter newsgroup.
>   In config file now can see next:
>   Server news.prov.net nntp {
>     Retries 3
>     Read *,!porno,!adult,!sex,!^alt,!picture,!erotic
>     PostTo *
>     GroupTimeout 150
> 
> # diff work/NewsCache-1.1.12/NServer-0.9.1/NVActiveDB.cc.old work/NewsCache-1.1.12/NServer-0.9.1/NVActiveDB.cc
> 186c186
> <               if (!filter || matchgroup(filter, line.c_str()) > 0) {
> ---
> >               if (!filter || matchgroup(filter, line.c_str()) >= 0) {
> 214c214
> <                    ((matchgroup(filter, gd.name()) > 0))) &&
> ---
> >                    ((matchgroup(filter, gd.name()) >= 0))) &&
> # diff work/NewsCache-1.1.12/NServer-0.9.1/MPList.cc.old work/NewsCache-1.1.12/NServer-0.9.1/MPList.cc
> 12c12
> <               if (clen > bmlen) {
> ---
> >               if (clen >= bmlen) {
> 30c30
> <               if (clen > bmlen) {
> ---
> >               if (clen >= bmlen) {
> # diff work/NewsCache-1.1.12/NServer-0.9.1/util.cc.old work/NewsCache-1.1.12/NServer-0.9.1/util.cc
> 11a12,13
> > #include <regex.h>
> > #include <stdlib.h>
> 13c15
> < #include"util.h"
> ---
> > #include "util.h"
> 71,117c73,142
> <       char c;
> <       int j, clen, bmlen = 0, bmrej = 0;
> <       int rejrule = 0;
> <
> <       j = 0;
> <       do {
> <               clen = 0;
> <               if (pattern[j] == '!') {
> <                       j++;
> <                       rejrule = 1;
> <               } else {
> <                       rejrule = 0;
> <               }
> <               while ((c = pattern[j]) && c == group[clen]) {
> <                       clen++;
> <                       j++;
> <               }
> <
> <               switch (c) {
> <               case ',':
> <               case '\0':
> <                       if (group[clen] != '\0' && !isspace(group[clen])) {
> <                               clen = -2;
> <                       }
> <                       clen++;
> <                       break;
> <               case '*':
> <                       clen++;
> <                       break;
> <               default:
> <                       clen = -1;
> <                       break;
> <               }
> <
> <               if (clen > bmlen) {
> <                       bmlen = clen;
> <                       bmrej = rejrule;
> <               }
> <
> <               while (c && c != ',') {
> <                       j++;
> <                       c = pattern[j];
> <               }
> <               j++;
> <       } while (c);
> <
> <       return bmrej ? -bmlen : bmlen;
> ---
> >         int err_no;
> >         regex_t *regex;
> >         regmatch_t *result;
> >         size_t match_num = 0;
> >         int rejrule, max_rej, rule_len, max_len=0;
> >         char rules[15][255];
> >         unsigned int rules_num=0, i, r_len=0, lr_len;
> >
> > //        memset(rules, NULL, sizeof(rules));
> >         while(rules_num<15) {
> >                 lr_len=0;
> >                 while(r_len < 255){
> >                         if(pattern[r_len] == '\0' || pattern[r_len] == ',' ) break;
> >                         rules[rules_num][lr_len] = pattern[r_len];
> >                         r_len++;
> >                         lr_len++;
> >                 }
> >                 rules_num++;
> >                 if(pattern[r_len] == '\0' || r_len == 255 ) break;
> >                 r_len++;
> >         }
> >
> >       for(i=0; i<rules_num; i++) {
> >         pattern = rules[i];
> >         if (pattern[0] == '!') {
> >                 pattern++;
> >                 rejrule = 1;
> >         } else {
> >                 rejrule = 0;
> >         }
> >         rule_len = strlen(pattern);
> >
> >         regex = ( regex_t * ) malloc( sizeof( regex_t ) );
> >         if ( regex == ( regex_t * ) 0 ) {
> > //                fprintf( stderr, "Memory allocation failed. Exiting.\n" );
> >                 exit( -1 );
> >         }
> >         memset( regex, 0, sizeof( regex_t ) );
> >
> >         /* Compile the regex */
> >         if ( ( err_no = regcomp( regex, pattern, 0 ) ) != 0 ) {
> >                 size_t length;
> >                 char *buffer;
> >                 length = regerror( err_no, regex, NULL, 0 );
> >                 buffer = (char *)malloc( length );
> >                 regerror( err_no, regex, buffer, length );
> > //                fprintf( stderr, "%s\n", buffer );      /* Print the error */
> >                 free( buffer );
> >                 regfree( regex );
> >                 exit( -1 );
> >         }
> >         result = ( regmatch_t * ) malloc( sizeof( regmatch_t ) );
> >         if ( result == ( regmatch_t * ) 0 ) {
> > //                fprintf( stderr, "Memory allocation failed. Exiting.\n" );
> >                 exit( -1 );
> >         }
> >         memset ( result, 0, sizeof( regmatch_t ) );
> >
> >         err_no = regexec( regex, group, 0 , result, 0 );
> >         if ( err_no == 0 ) {
> >                 if(rule_len > max_len){
> >                         max_len = rule_len;
> >                         max_rej = rejrule;
> >                 }
> >         }
> >         regfree( regex );
> >         free( regex );
> >         free( result );
> >        }
> >         return max_rej ? -max_len : max_len;
> 
> -- 
> Cheers,
>  Konstantin Nikonenko        http://www.kot.dp.ua/
>  Spetztekhosnastka JSC       http://www.d-sto.com/

[Content type application/pgp-signature not shown. Download]
[<<] [<] Page 1 of 1 [>] [>>]


Powered by ezmlm-browse 0.20.