9front - general discussion about 9front
 help / color / mirror / Atom feed
From: ori@eigenstate.org
To: 9front@9front.org
Subject: upas/fs: change header filters
Date: Sun, 04 Oct 2020 20:13:56 -0700	[thread overview]
Message-ID: <C239840F49364B6A1C8F3EEDE96856C1@eigenstate.org> (raw)

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;
 }
 



             reply	other threads:[~2020-10-05  3:13 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-05  3:13 ori [this message]
2020-10-05 17:03 ` [9front] " Lyndon Nerenberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=C239840F49364B6A1C8F3EEDE96856C1@eigenstate.org \
    --to=ori@eigenstate.org \
    --cc=9front@9front.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).