jeh@simpact.com (01/01/90)
Running NEWS 5.9C (thanks, Geoff!), VMS 5.2.
While reviewing last night's RNEWS log files [RNEWS is a DECUS uucp thing
that takes news batches received via uucp and feeds them to NEWS via
ADD BATCH commands] I noticed a message that was rejected due to my sys
filter.
The message was posted to alt.flame and to news.groups (in that order), and
followups were directed to alt.flame. My sys filter says (among other things)
news,!alt
Is this the intended behavior? I thought that the posting to news.groups
should be alllowed.
--- Jamie Hanrahan, Simpact Associates, San Diego CA
Chair, VMSnet [DECUS uucp] and Internals Working Groups, DECUS VAX Systems SIG
Internet: jeh@simpact.com, or if that fails, jeh@crash.cts.com
Uucp: ...{crash,scubed,decwrl}!simpact!jehgih900@csc.anu.oz (Geoff Huston) (01/12/90)
In article <811.259e10c7@simpact.com>, jeh@simpact.com writes: > Running NEWS 5.9C (thanks, Geoff!), VMS 5.2. > > While reviewing last night's RNEWS log files [RNEWS is a DECUS uucp thing > that takes news batches received via uucp and feeds them to NEWS via > ADD BATCH commands] I noticed a message that was rejected due to my sys > filter. > > The message was posted to alt.flame and to news.groups (in that order), and > followups were directed to alt.flame. My sys filter says (among other things) > > news,!alt > > Is this the intended behavior? I thought that the posting to news.groups > should be alllowed. There is a logic error in the program whereby if ANY newsgroup is explicitly rejected by the filter, then the item is rejected. What I was trying to catch was filters of the form "comp,!comp.os.vms", where all comp.* are accepted APART from comp.os.vms. I think that the following fix will remove the problem... Geoff Huston NEWSDIST.C /* * test_accept * * Test if the newsgroup groups and distribution dist is accepted * using the filter f */ static test_accept(newsgroups,distribution,f) char *newsgroups, *distribution; sys_filter_t *f; { char *cp1, *cp2, locname[NGRP_SIZE], wname[NGRP_SIZE], line[IO_SIZE]; int accept = 0, ngaccept; sys_filter_t *f_sav = f; strcpy(line,newsgroups); cp1 = line; if (!f) return(1); do { if (cp2 = strchr(cp1,',')) *cp2++ = '\0'; util_cvrt(locname,cp1); f = f_sav; ngaccept = 0; while (f) { if (*f->sys_filtnam == '!') { if (!strcmp("all",f->sys_filtnam + 1)) ngaccept = -1; else if (wild_match(locname,f->sys_filtnam + 1)) ngaccept = -1; else { strcpy(wname,f->sys_filtnam + 1); strcat(wname,".*"); if (wild_match(locname,wname)) ngaccept = -1; } if (ngaccept < 0) break; } else if (!ngaccept) { if (!strcmp("all",f->sys_filtnam)) ngaccept = 1; else if (wild_match(locname,f->sys_filtnam)) ngaccept = 1; else { strcpy(wname,f->sys_filtnam); strcat(wname,".*"); if (wild_match(locname,wname)) ngaccept = 1; } } f = f->sys_fnext; } if (ngaccept == 1) accept = 1; } while (!accept && (cp1 = cp2)); if (!accept) return(0); if ((!distribution) || (!*distribution)) return(accept); accept = 0; strcpy(line,distribution); if (!strcmp(line,"all")) return(1); cp1 = line; do { if (cp2 = strchr(cp1,',')) *cp2++ = '\0'; util_cvrt(locname,cp1); f = f_sav; ngaccept = 0; while (f) { if (*f->sys_filtnam == '!') { if (!strcmp("all",f->sys_filtnam + 1)) ngaccept = -1; else if (wild_match(locname,f->sys_filtnam + 1)) ngaccept = -1; else { strcpy(wname,f->sys_filtnam + 1); strcat(wname,".*"); if (wild_match(locname,wname)) ngaccept = 1; } if (ngaccept < 0) break; } else if (!ngaccept) { if (!strcmp("all",f->sys_filtnam)) ngaccept = 1; else if (wild_match(locname,f->sys_filtnam)) ngaccept = 1; else { strcpy(wname,f->sys_filtnam); strcat(wname,".*"); if (wild_match(locname,wname)) ngaccept = 1; else { strcat(locname,"."); if (!strncmp(locname,f->sys_filtnam,strlen(locname))) ngaccept = 1; locname[strlen(locname) - 1] = '\0'; } } } f = f->sys_fnext; } if (ngaccept == 1) accept = 1; cp1 = cp2; } while ((!accept) && (cp1)); return(accept); }