scribo

Email-based phlog generator
git clone git://git.z3bra.org/scribo.git
Log | Files | Refs

commit d09787997bb6279189f3c39ef921ff2c1853a74d
parent 1e2c694a88f3fb5f1cc3c42d9e079495cd530a83
Author: Willy Goiffon <dev@z3bra.org>
Date:   Tue,  8 Sep 2020 15:25:43 +0200

Check Content-Transfer-Encoding header field to be "8bit"

Diffstat:
Mscribo.c | 19+++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/scribo.c b/scribo.c @@ -131,6 +131,8 @@ parseheaders(FILE *fp, struct headers *head) int verifyheaders(struct headers *head) { + char *addr, *type, *encoding; + if (!head) return -1; @@ -149,18 +151,23 @@ verifyheaders(struct headers *head) return -1; } - if (!header(head, "Content-Type")) { - fprintf(stderr, "Missing header: Content-Type\n"); + + /* only accept plain text emails */ + type = header(head, "Content-Type"); + if (type && strncmp(type, "text/plain", 10)) { + fprintf(stderr, "Content-Type: %s is not supported\n", type); return -1; } - /* only accept plain text emails */ - if (strncmp(header(head, "Content-Type"), "text/plain", 10)) { - fprintf(stderr, "Invalid Content-Type: %s\n", header(head, "Content-Type")); + /* ensure message body is unaltered */ + encoding = header(head, "Content-Transfer-Encoding"); + if (encoding && strncmp(encoding, "8bit", 4)) { + fprintf(stderr, "Content-Transfer-Encoding: %s is not supported\n", encoding); return -1; } - char *addr = rfc5322_addr(header(head, "From")); + /* verify sender's address */ + addr = rfc5322_addr(header(head, "From")); if (strncmp(addr, author, strlen(author))) { fprintf(stderr, "<%s> is not authorized to publish content\n", addr); return -1;