commit 85e612430fe7a24f11d00b41e53e8c1849d2d7e8
parent b9621702a832d1063c5030a3469b02293e3f220e
Author: parazyd <parazyd@dyne.org>
Date: Tue, 26 Feb 2019 11:47:45 +0100
Add 'Subject' handling in sieve.c.
Diffstat:
M | sieve.c | | | 48 | +++++++++++++++++++++++++++++++++--------------- |
1 file changed, 33 insertions(+), 15 deletions(-)
diff --git a/sieve.c b/sieve.c
@@ -13,36 +13,52 @@ char *argv0;
int vflag;
int genrule(int rt, char *line) {
- char *type, *email, m[256];
- char *mbox = m;
+ char *type, *fv, m[256], f[256];
+ char *mbox = m, *filt = f;
+
+ switch (rt) {
+ case 69: /* whitelist.abook */
+ strcpy(filt, "\"From\"");
+ strcpy(mbox, "INBOX");
+ break;
+ case 1: /* To: */
+ strcpy(filt, "[ \"To\",\"Cc\" ]");
+ break;
+ case 2: /* From: */
+ strcpy(filt, "\"From\"");
+ break;
+ case 3: /* Subject: */
+ strcpy(filt, "\"Subject\"");
+ break;
+ default:
+ return 1;
+ }
switch (rt) {
case 69:
strtok(line, "=");
- email = strtok(NULL, ",");
- if (!email)
+ fv= strtok(NULL, ",");
+ if (!fv)
return 1;
-
- strcpy(mbox, "INBOX");
break;
case 1: /* To: */
case 2: /* From: */
- type = strtok(line, ",");
+ case 3: /* Subject: */
+ type = strtok(line, "/");
if (!type) return 1;
- email = strtok(NULL, ",");
- if (!email) return 1;
- mbox = strtok(NULL, ",");
- if (!mbox)
- return 1;
+ fv = strtok(NULL, "/");
+ if (!fv) return 1;
+ mbox = strtok(NULL, "/");
+ if (!mbox) return 1;
break;
default:
- return 0;
+ return 1;
}
- printf("if header :contains %s \"%s\"", rt != 1 ? "\"From\"" : "[ \"To\",\"Cc\" ]", email);
+ printf("if header :contains %s %s", filt, fv);
printf(" { fileinto :create \"%s\"; stop; }\n", mbox);
if (vflag)
- info("%s: %s -> %s\n", rt == 1 ? "to" : "from", email, mbox);
+ info("%s: %s -> %s\n", filt, fv, mbox);
return 0;
}
@@ -67,6 +83,8 @@ int sievemain(int argc, char *argv[]) {
rt = 1;
else if (!strncmp("from", l, 4))
rt = 2;
+ else if (!strncmp("subject", l, 7))
+ rt = 3;
else if (!strncmp("email=", l, 6))
rt = 69;