From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mimir.eigenstate.org ([206.124.132.107]) by ewsd; Sat Oct 24 20:51:04 -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 9604d607 (TLSv1.2:ECDHE-RSA-AES256-SHA:256:NO) for <9front@9front.org>; Sat, 24 Oct 2020 17:50:52 -0700 (PDT) Message-ID: <42AD6EC465E0C6673103DC8F8C4C92A0@eigenstate.org> To: 9front@9front.org Subject: upas/fs: header ignores Date: Sat, 24 Oct 2020 17:50:51 -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: extended decentralized property factory Now that the release is out, I'm going to look at more email stuff. So, here's the first bit of work, which does threee things: - Remove /mail/lib/ignore, which filters the headers we show. - Add /mail/lib/filterheaders, which has a new syntax: lines default to keep, but '!' can be used to drop a header: - Add defaults. The last time this came up, some people had opinions on what reasonable defaults are, so if you care, speak up. Otherwise, the default behavior will be unchanged from what we have today, since I have no strong feelings on the matter. diff -r 0281cd6caa8c sys/src/cmd/upas/fs/fs.c --- a/sys/src/cmd/upas/fs/fs.c Sat Oct 24 17:24:59 2020 -0700 +++ b/sys/src/cmd/upas/fs/fs.c Sat Oct 24 17:46:15 2020 -0700 @@ -1500,11 +1500,31 @@ 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:"}, +}; /* * read the file of headers to ignore @@ -1515,28 +1535,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 +1571,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; }