diff options
Diffstat (limited to 'sqmail-4.3.07/src/printforward.c')
-rw-r--r-- | sqmail-4.3.07/src/printforward.c | 142 |
1 files changed, 0 insertions, 142 deletions
diff --git a/sqmail-4.3.07/src/printforward.c b/sqmail-4.3.07/src/printforward.c deleted file mode 100644 index 0ab7ad9..0000000 --- a/sqmail-4.3.07/src/printforward.c +++ /dev/null @@ -1,142 +0,0 @@ -#include <unistd.h> -#include "buffer.h" -#include "logmsg.h" -#include "stralloc.h" -#include "cdbread.h" - -#define WHO "printmaillist" - -void badformat() -{ - logmsg(WHO,100,FATAL,"bad database format"); -} -void nomem() -{ - logmsg(WHO,111,FATAL,"out of memory"); -} - -void getch(char *ch) -{ - int r; - r = buffer_get(buffer_0small,ch,1); - if (r == -1) - logmsg(WHO,111,FATAL,"unable to read input"); - if (r == 0) - badformat(); -} - -void out(char *ch) -{ - if (buffer_put(buffer_1small,ch,1) == -1) - logmsg(WHO,111,FATAL,"unable to write output"); -} - -void printbuf(char *buf) -{ - while (*buf) - out(buf++); -} - -void printsafe(char *buf,int len) -{ - char ch; - - while (len) { - ch = *buf; - if ((ch <= 32) || (ch == ',') || (ch == ':') || (ch == ';') || (ch == '\\') || (ch == '#')) - out("\\"); - out(&ch); - ++buf; - --len; - } -} - -stralloc key = {0}; -stralloc data = {0}; - -int main() -{ - uint32 eod; - uint32 pos; - uint32 klen; - uint32 dlen; - char buf[8]; - char ch; - int i; - int j; - - for (i = 0; i < 4; ++i) - getch(buf + i); - eod = cdb_unpack(buf); - - for (i = 4; i < 2048; ++i) - getch(&ch); - - pos = 2048; - while (pos < eod) { - if (eod - pos < 8) badformat(); - pos += 8; - for (i = 0; i < 8; ++i) getch(buf + i); - klen = cdb_unpack(buf); - dlen = cdb_unpack(buf + 4); - - if (!stralloc_copys(&key,"")) nomem(); - if (eod - pos < klen) badformat(); - pos += klen; - while (klen) { - --klen; - getch(&ch); - if (!stralloc_append(&key,&ch)) nomem(); - } - - if (eod - pos < dlen) badformat(); - pos += dlen; - if (!stralloc_copys(&data,"")) nomem(); - while (dlen) { - --dlen; - getch(&ch); - if (!stralloc_append(&data,&ch)) nomem(); - } - - if (!key.len) badformat(); - if (key.s[0] == '?') { - printsafe(key.s + 1,key.len - 1); - printbuf(": ?"); - printsafe(data.s,data.len); - printbuf(";\n"); - } - else if (key.s[0] == ':') { - printsafe(key.s + 1,key.len - 1); - printbuf(":\n"); - - i = 0; - for (j = 0; j < data.len; ++j) - if (!data.s[j]) { - if ((data.s[i] == '.') || (data.s[i] == '/')) { - printbuf(", "); - printsafe(data.s + i,j - i); - printbuf("\n"); - } - else if ((data.s[i] == '|') || (data.s[i] == '!')) { - printbuf(", "); - printsafe(data.s + i,j - i); - printbuf("\n"); - } - else if ((data.s[i] == '&') && (j - i < 900)) { - printbuf(", "); - printsafe(data.s + i,j - i); - printbuf("\n"); - } - else badformat(); - i = j + 1; - } - if (i != j) badformat(); - printbuf(";\n"); - } - else badformat(); - } - - if (buffer_flush(buffer_1small) == -1) - logmsg(WHO,111,FATAL,"unable to write output"); - _exit(0); -} |