rp

simple email tools
git clone https://git.parazyd.org/rp
Log | Files | Refs | README | LICENSE

commit a78f132522f60debce045440c1074720148135db
parent f88db27b9ff5c1d50fb7e1151ada4d095fa6293d
Author: parazyd <parazyd@dyne.org>
Date:   Sat, 10 Mar 2018 12:13:46 +0100

Some improvements.

Diffstat:
Mbin/rpsieve | 11++++++++---
Mrohrpost.c | 1-
Msieve.c | 26+++++++++++++++++++-------
Mutil.c | 16+++++++---------
Mutil.h | 2+-
5 files changed, 35 insertions(+), 21 deletions(-)

diff --git a/bin/rpsieve b/bin/rpsieve @@ -4,9 +4,10 @@ export PATH="/usr/local/bin:/usr/bin:/bin" profile="${RPPROFILE:-$HOME/.rp/default}" usage() { - printf " * usage: $(basename $0) [-e] [-u]\n" + printf " * usage: $(basename $0) [-e] [-u] [-v]\n" printf "\t-e: edit filters.txt before continuing\n" printf "\t-u: upload filters.sieve when done\n" + printf "\t-v: be verbose\n" exit 1 } @@ -18,6 +19,9 @@ for i in $@; do -u) upload=true ;; + -v) + verbose="-v" + ;; *) usage ;; @@ -39,6 +43,7 @@ ab="$profile/whitelist.abook" exit 1 } +echo " * generating sieve rules" cat <<EOF > "$fs" # mailbox supports fileinto :create require ["fileinto","mailbox","variables"]; @@ -52,8 +57,8 @@ if header :contains "Sender" "mailman-bounce" { # own filters EOF -rohrpost rpsieve < "$ft" >> "$fs" -rohrpost rpsieve < "$ab" >> "$fs" +rohrpost rpsieve $verbose < "$ft" >> "$fs" +rohrpost rpsieve $verbose < "$ab" >> "$fs" cat <<EOF >> "$fs" # spam diff --git a/rohrpost.c b/rohrpost.c @@ -76,6 +76,5 @@ int main(int argc, char *argv[]) { } usage(); - return 1; } diff --git a/sieve.c b/sieve.c @@ -10,6 +10,7 @@ #include "ind.h" char *argv0; +int vflag; int gento(char *line) { char *type, *email, *what, *mbox; @@ -29,7 +30,8 @@ int gento(char *line) { printf("if header :contains [ \"To\",\"Cc\" ] \"%s\"", email); printf(" { fileinto :create \"%s\"; stop; }\n", mbox); - info("to: %s -> %s\n", email, mbox); + if (vflag) + info("to: %s -> %s\n", email, mbox); return 0; } @@ -52,7 +54,8 @@ int genfrom(char *line) { printf("if header :contains \"From\" \"%s\"", email); printf(" { fileinto :create \"%s\"; stop; }\n", mbox); - info("from: %s -> %s\n", email, mbox); + if (vflag) + info("from: %s -> %s\n", email, mbox); return 0; } @@ -67,7 +70,8 @@ int genabook(char *line) { printf("if header :contains \"From\" \"%s\"", email); printf(" { fileinto :create \"INBOX\"; stop; }\n"); - info("from: %s -> INBOX\n", email); + if (vflag) + info("from: %s -> INBOX\n", email); return 0; } @@ -76,20 +80,28 @@ int sievemain(int argc, char *argv[]) { int c = 0; char l[MAXLINESIZE]; + ARGBEGIN { + case 'v': + vflag = 1; + break; + default: + return 1; + } ARGEND; + while (fgets(l, sizeof(l), stdin)) { c++; strtok(l, "\n"); if (!strncmp("to", l, 2)) { if (gento(l)) - warn("invalid line: %d\n", c); + warn("invalid line %d: %s\n", c, l); } else if (!strncmp("from", l, 4)) { if (genfrom(l)) - warn("invalid line: %d\n", c); - + warn("invalid line %d: %s\n", c, l); } else if (!strncmp("email=", l, 6)) { - genabook(l); + if (genabook(l)) + warn("invalid line %d: %s\n", c, l); } } printf("\n"); diff --git a/util.c b/util.c @@ -38,12 +38,12 @@ int randint(int max) { return ret % max; } -char *randstring(char *str, size_t size) { +char *randstring(char *str, int size) { if (size) { size--; - for (size_t n = 0; n < size; n++) { - int key = randint(sizeof(be-1)); - str[n] = be[key]; + for (int i = 0; i < size; i++) { + int key = randint(strlen(be)); + str[i] = be[key]; } str[size] = '\0'; } @@ -60,9 +60,9 @@ int genmsgid(void) { } int genmimeb(void) { - char buf[5]; + char buf[6]; randstring(buf, sizeof(buf)); - printf("%s-FuNkADeLiC\n", buf); + printf("%sFuNkADeLiC\n", buf); return 0; } @@ -112,9 +112,7 @@ getfprend: } int utilmain(int argc, char *argv[]) { - char *runcmd; - - runcmd = NULL; + char *runcmd = NULL; ARGBEGIN { case 'e': diff --git a/util.h b/util.h @@ -9,7 +9,7 @@ int utilmain(int argc, char *argv[]); int *randint(int max); -char *randstring(char *str, size_t size); +char *randstring(char *str, int size); int genmsgid(void); int genmimeb(void);