summaryrefslogtreecommitdiff
path: root/sqmail-4.3.07/src/printforward.c
diff options
context:
space:
mode:
Diffstat (limited to 'sqmail-4.3.07/src/printforward.c')
-rw-r--r--sqmail-4.3.07/src/printforward.c142
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);
-}