From fd404641357a4a3bc0a55cb31deb3d4bad4ec2ee Mon Sep 17 00:00:00 2001 From: manuel Date: Mon, 4 Feb 2013 02:55:38 +0100 Subject: [PATCH] badrcptto support qmail-gentoo-1.03-r16-badrcptto-morebadrcptto-accdias --- qmail-newbrt.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 qmail-newbrt.c (limited to 'qmail-newbrt.c') diff --git a/qmail-newbrt.c b/qmail-newbrt.c new file mode 100644 index 0000000..9344444 --- /dev/null +++ b/qmail-newbrt.c @@ -0,0 +1,70 @@ +#include "strerr.h" +#include "stralloc.h" +#include "substdio.h" +#include "getln.h" +#include "exit.h" +#include "readwrite.h" +#include "open.h" +#include "auto_qmail.h" +#include "cdbmss.h" + +#define FATAL "qmail-newbrt: fatal: " + +void die_read() +{ + strerr_die2sys(111,FATAL,"unable to read control/morebadrcptto: "); +} +void die_write() +{ + strerr_die2sys(111,FATAL,"unable to write to control/morebadrcptto.tmp: "); +} + +char inbuf[1024]; +substdio ssin; + +int fd; +int fdtemp; + +struct cdbmss cdbmss; +stralloc line = {0}; +int match; + +void main() +{ + umask(033); + if (chdir(auto_qmail) == -1) + strerr_die4sys(111,FATAL,"unable to chdir to ",auto_qmail,": "); + + fd = open_read("control/morebadrcptto"); + if (fd == -1) die_read(); + + substdio_fdbuf(&ssin,read,fd,inbuf,sizeof inbuf); + + fdtemp = open_trunc("control/morebadrcptto.tmp"); + if (fdtemp == -1) die_write(); + + if (cdbmss_start(&cdbmss,fdtemp) == -1) die_write(); + + for (;;) { + if (getln(&ssin,&line,&match,'\n') != 0) die_read(); + case_lowerb(line.s,line.len); + while (line.len) { + if (line.s[line.len - 1] == ' ') { --line.len; continue; } + if (line.s[line.len - 1] == '\n') { --line.len; continue; } + if (line.s[line.len - 1] == '\t') { --line.len; continue; } + if (line.s[0] != '#') + if (cdbmss_add(&cdbmss,line.s,line.len,"",0) == -1) + die_write(); + break; + } + if (!match) break; + } + + if (cdbmss_finish(&cdbmss) == -1) die_write(); + if (fsync(fdtemp) == -1) die_write(); + if (close(fdtemp) == -1) die_write(); /* NFS stupidity */ + if (rename("control/morebadrcptto.tmp","control/morebadrcptto.cdb") == -1) + strerr_die2sys(111,FATAL,"unable to move control/morebadrcpto.tmp to control/morebadrcptto.cdb"); + + _exit(0); +} -- cgit v1.2.3