summaryrefslogtreecommitdiff
path: root/src/qmail-mfrules.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmail-mfrules.c')
-rw-r--r--src/qmail-mfrules.c130
1 files changed, 71 insertions, 59 deletions
diff --git a/src/qmail-mfrules.c b/src/qmail-mfrules.c
index e8cfc94..7247cf7 100644
--- a/src/qmail-mfrules.c
+++ b/src/qmail-mfrules.c
@@ -1,22 +1,25 @@
#include <sys/stat.h>
-#include <stdio.h> // rename
-#include "logmsg.h"
-#include "stralloc.h"
-#include "buffer.h"
-#include "getln.h"
-#include "exit.h"
#include <unistd.h>
-#include "open.h"
-#include "auto_qmail.h"
+
+#include <stdio.h> // rename
+
+#include "buffer.h"
+#include "byte.h"
+#include "case.h"
#include "cdbmake.h"
+#include "exit.h"
#include "fmt.h"
+#include "getln.h"
+#include "logmsg.h"
+#include "open.h"
#include "scan.h"
-#include "byte.h"
-#include "case.h"
+#include "stralloc.h"
+
+#include "auto_qmail.h"
#define WHO "qmail-mfrules"
-int rename(const char *,const char *); // stdio.h
+int rename(const char *, const char *); // stdio.h
stralloc address = {0};
stralloc data = {0};
@@ -34,30 +37,30 @@ struct cdb_make cdb;
void die_nomem()
{
- logmsg(WHO,112,FATAL,"out of memory");
+ logmsg(WHO, 112, FATAL, "out of memory");
}
void die_parse()
{
if (!stralloc_0(&line)) die_nomem();
- logmsg(WHO,100,ERROR,B("unable to parse this line: ",line.s));
+ logmsg(WHO, 100, ERROR, B("unable to parse this line: ", line.s));
}
void die_read()
{
- logmsg(WHO,111,ERROR,"unable to read control/mailfromrules");
+ logmsg(WHO, 111, ERROR, "unable to read control/mailfromrules");
}
void die_write()
{
- logmsg(WHO,111,ERROR,"unable to write to control/mailfromrules.tmp");
+ logmsg(WHO, 111, ERROR, "unable to write to control/mailfromrules.tmp");
}
char strnum[FMT_ULONG];
stralloc sanum = {0};
-void getnum(char *buf,int len,unsigned long *u)
+void getnum(char *buf, int len, unsigned long *u)
{
- if (!stralloc_copyb(&sanum,buf,len)) die_nomem();
+ if (!stralloc_copyb(&sanum, buf, len)) die_nomem();
if (!stralloc_0(&sanum)) die_nomem();
- if (sanum.s[scan_ulong(sanum.s,u)]) die_parse();
+ if (sanum.s[scan_ulong(sanum.s, u)]) die_parse();
}
void doaddressdata()
@@ -68,26 +71,29 @@ void doaddressdata()
unsigned long bot;
unsigned long top;
- if (byte_chr(address.s,address.len,'=') == address.len)
- if (byte_chr(address.s,address.len,'@') == address.len) {
- i = byte_chr(address.s,address.len,'-');
+ if (byte_chr(address.s, address.len, '=') == address.len)
+ if (byte_chr(address.s, address.len, '@') == address.len) {
+ i = byte_chr(address.s, address.len, '-');
if (i < address.len) {
- left = byte_rchr(address.s,i,'.');
- if (left == i) left = 0; else ++left;
+ left = byte_rchr(address.s, i, '.');
+ if (left == i)
+ left = 0;
+ else
+ ++left;
++i;
- right = i + byte_chr(address.s + i,address.len - i,'.');
-
- getnum(address.s + left,i - 1 - left,&bot);
- getnum(address.s + i,right - i,&top);
+ right = i + byte_chr(address.s + i, address.len - i, '.');
+
+ getnum(address.s + left, i - 1 - left, &bot);
+ getnum(address.s + i, right - i, &top);
if (top > 255) top = 255;
while (bot <= top) {
- if (!stralloc_copyb(&key,address.s,left)) die_nomem();
- if (!stralloc_catb(&key,strnum,fmt_ulong(strnum,bot))) die_nomem();
- if (!stralloc_catb(&key,address.s + right,address.len - right)) die_nomem();
- case_lowerb(key.s,key.len);
- if (cdb_make_add(&cdb,key.s,key.len,data.s,data.len) == -1) die_write();
+ if (!stralloc_copyb(&key, address.s, left)) die_nomem();
+ if (!stralloc_catb(&key, strnum, fmt_ulong(strnum, bot))) die_nomem();
+ if (!stralloc_catb(&key, address.s + right, address.len - right)) die_nomem();
+ case_lowerb(key.s, key.len);
+ if (cdb_make_add(&cdb, key.s, key.len, data.s, data.len) == -1) die_write();
++bot;
}
@@ -95,9 +101,9 @@ void doaddressdata()
}
}
- case_lowerb(address.s,address.len);
- case_lowerb(data.s,data.len);
- if (cdb_make_add(&cdb,address.s,address.len,data.s,data.len) == -1) die_write();
+ case_lowerb(address.s, address.len);
+ case_lowerb(data.s, data.len);
+ if (cdb_make_add(&cdb, address.s, address.len, data.s, data.len) == -1) die_write();
}
int main()
@@ -109,23 +115,23 @@ int main()
char ch;
umask(033);
- if (chdir(auto_qmail) == -1)
- logmsg(WHO,111,ERROR,B("unable to chdir to: ",auto_qmail));
+ if (chdir(auto_qmail) == -1) logmsg(WHO, 111, ERROR, B("unable to chdir to: ", auto_qmail));
fd = open_read("control/mailfromrules");
if (fd == -1) die_read();
- buffer_init(&bi,read,fd,inbuf,sizeof(inbuf));
+ buffer_init(&bi, read, fd, inbuf, sizeof(inbuf));
fdtemp = open_trunc("control/mailfromrules.tmp");
if (fdtemp == -1) die_write();
- if (cdb_make_start(&cdb,fdtemp) == -1) die_write();
+ if (cdb_make_start(&cdb, fdtemp) == -1) die_write();
while (match) {
- if (getln(&bi,&line,&match,'\n') != 0) die_read();
+ if (getln(&bi, &line, &match, '\n') != 0) die_read();
- x = line.s; len = line.len;
+ x = line.s;
+ len = line.len;
if (!len) break;
if (x[0] == '#') continue;
@@ -133,32 +139,38 @@ int main()
while (len) {
ch = x[len - 1];
- if (ch != '\n') if (ch != ' ') if (ch != '\t') break;
+ if (ch != '\n')
+ if (ch != ' ')
+ if (ch != '\t') break;
--len;
}
line.len = len; /* for die_parse() */
- amper = byte_chr(x,len,'&');
+ amper = byte_chr(x, len, '&');
if (!amper) die_parse();
- if (amper) if (amper == len || amper < 2) die_parse();
+ if (amper)
+ if (amper == len || amper < 2) die_parse();
- if (!stralloc_copyb(&address,x,amper)) die_nomem();
- if (!stralloc_copys(&data,"")) die_nomem();
+ if (!stralloc_copyb(&address, x, amper)) die_nomem();
+ if (!stralloc_copys(&data, "")) die_nomem();
- x = line.s + amper + 1; len = line.len - amper - 1;
+ x = line.s + amper + 1;
+ len = line.len - amper - 1;
while (len) {
- if (len < 3) die_parse(); /* input checks */
- if ( *x == ',' || *x == ' ' || *x == '\t') die_parse();
- i = byte_chr(x,len,','); /* &addr1,addr2,.. */
+ if (len < 3) die_parse(); /* input checks */
+ if (*x == ',' || *x == ' ' || *x == '\t') die_parse();
+ i = byte_chr(x, len, ','); /* &addr1,addr2,.. */
if (i > 0 && i < len) {
- if (!stralloc_catb(&data,"+",1)) die_nomem();
- if (!stralloc_catb(&data,x,i)) die_nomem();
- x += i + 1; len -= i + 1; }
- else {
- if (!stralloc_catb(&data,"+",1)) die_nomem();
- if (!stralloc_catb(&data,x,len)) die_nomem();
- len = 0; }
+ if (!stralloc_catb(&data, "+", 1)) die_nomem();
+ if (!stralloc_catb(&data, x, i)) die_nomem();
+ x += i + 1;
+ len -= i + 1;
+ } else {
+ if (!stralloc_catb(&data, "+", 1)) die_nomem();
+ if (!stralloc_catb(&data, x, len)) die_nomem();
+ len = 0;
+ }
}
doaddressdata();
}
@@ -166,8 +178,8 @@ int main()
if (cdb_make_finish(&cdb) == -1) die_write();
if (fsync(fdtemp) == -1) die_write();
if (close(fdtemp) == -1) die_write(); /* NFS stupidity */
- if (rename("control/mailfromrules.tmp","control/mailfromrules.cdb") == -1)
- logmsg(WHO,111,ERROR,"unable to move control/mailfromrules.tmp to control/mailfromrules.cdb");
+ if (rename("control/mailfromrules.tmp", "control/mailfromrules.cdb") == -1)
+ logmsg(WHO, 111, ERROR, "unable to move control/mailfromrules.tmp to control/mailfromrules.cdb");
_exit(0);
}