From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mimir.eigenstate.org ([206.124.132.107]) by ewsd; Sun Oct 4 23:14:06 -0400 2020 Received: from abbatoir.fios-router.home (pool-74-101-2-6.nycmny.fios.verizon.net [74.101.2.6]) by mimir.eigenstate.org (OpenSMTPD) with ESMTPSA id 00008e99 (TLSv1.2:ECDHE-RSA-AES256-SHA:256:NO) for <9front@9front.org>; Sun, 4 Oct 2020 20:13:57 -0700 (PDT) Message-ID: To: 9front@9front.org Subject: upas/fs: change header filters Date: Sun, 04 Oct 2020 20:13:56 -0700 From: ori@eigenstate.org MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: optimized singleton pipelining-based interface This change does two things: 1) It puts in some defaults -- for now, the behavior should, be unchanged, but I think we can put some more thought into the default set of headers to show. This lets us get rid of /mail/lib/ignore. 2) It flips the default action to accept a header, and adds a '!' operator to reject. First match wins. Note that the default action if there are no matches is to accept, so for a file that rejects all but a few headers, the last line should be a '!' on its own: # Show a few headers From: To: # Drop X-original-to !X-Original-To: # Keep all other x-headers X- # Drop everything else ! diff -r bd503458654d sys/src/cmd/upas/fs/fs.c --- a/sys/src/cmd/upas/fs/fs.c Sun Oct 04 22:45:22 2020 +0200 +++ b/sys/src/cmd/upas/fs/fs.c Sun Oct 04 20:12:47 2020 -0700 @@ -1500,11 +1500,32 @@ typedef struct Ignorance Ignorance; struct Ignorance { - Ignorance *next; + int drop; + int len; char *str; - int len; }; static Ignorance *ignorance; +static int nignorance; +static Ignorance defaultignorance[] = { + {.drop=1, .len=13, .str="Mime-Version:"}, + {.drop=1, .len=8, .str="Content-"}, + {.drop=1, .len=11, .str="Message-Id:"}, + {.drop=1, .len=9, .str="Received:"}, + {.drop=1, .len=7, .str="Mailer:"}, + {.drop=1, .len=11, .str="References:"}, + {.drop=1, .len=11, .str="Precedence:"}, + {.drop=1, .len=2, .str="X-"}, + {.drop=1, .len=5, .str="X400-"}, + {.drop=1, .len=2, .str="O-"}, + {.drop=1, .len=5, .str="List-"}, + {.drop=1, .len=13, .str="Organization:"}, + {.drop=1, .len=11, .str="User-Agent:"}, + {.drop=1, .len=12, .str="In-Reply-To:"}, + {.drop=1, .len=13, .str="Delivered-To:"}, + {.drop=1, .len=20, .str="DomainKey-Signature:"}, + {.drop=1, .len=15, .str="DKIM-Signature:"}, + {.drop=0, .len=0, .str=""}, +}; /* * read the file of headers to ignore @@ -1515,28 +1536,32 @@ char *p; Ignorance *i; Biobuf *b; + int drop; if(ignorance != nil) return; - b = Bopen("/mail/lib/ignore", OREAD); - if(b == 0) + b = Bopen("/mail/lib/filterheaders", OREAD); + if(b == nil){ + ignorance = defaultignorance; + nignorance = nelem(defaultignorance); return; + } while(p = Brdline(b, '\n')){ p[Blinelen(b) - 1] = 0; while(*p && (*p == ' ' || *p == '\t')) p++; - if(*p == '#') + if(*p == '#' || *p == '\0') continue; - i = emalloc(sizeof *i); + if(drop = (*p == '!')) + p++; + ignorance = erealloc(ignorance, ++nignorance*sizeof(*i)); + i = &ignorance[nignorance - 1]; + i->drop = drop; i->len = strlen(p); i->str = strdup(p); - if(i->str == 0){ - free(i); - break; - } - i->next = ignorance; - ignorance = i; + if(i->str == nil) + sysfatal("strdup: %r"); } Bterm(b); } @@ -1547,9 +1572,9 @@ Ignorance *i; readignore(); - for(i = ignorance; i != nil; i = i->next) + for(i = ignorance; i != &ignorance[nignorance]; i++) if(i->len <= n && cistrncmp(i->str, p, i->len) == 0) - return 1; + return i->drop; return 0; }