s/qmail 4.2.29a
Next generation secure email transport
Loading...
Searching...
No Matches
forward.c
Go to the documentation of this file.
1#include <unistd.h>
2#include "sig.h"
3#include "exit.h"
4#include "env.h"
5#include "qmail.h"
6#include "logmsg.h"
7#include "buffer.h"
8#include "fmt.h"
9
10#define WHO "forward"
11
12void die_nomem() { logmsg(WHO,111,FATAL,"out of memory"); }
13
14struct qmail qqt;
15
16ssize_t mywrite(int fd, char *buf, int len)
17{
18 qmail_put(&qqt,buf,len);
19 return len;
20}
21
22char inbuf[BUFFER_INSIZE];
23buffer bi = BUFFER_INIT(read,0,inbuf,sizeof(inbuf));
24char outbuf[1];
25buffer bo = BUFFER_INIT(mywrite,-1,outbuf,sizeof(outbuf));
26
27char num[FMT_ULONG];
28
29int main(int argc, char **argv)
30{
31 char *sender;
32 char *dtline;
33 char *qqx;
34
35 sig_pipeignore();
36
37 sender = env_get("NEWSENDER");
38 if (!sender)
39 logmsg(WHO,100,FATAL,"NEWSENDER not set");
40 dtline = env_get("DTLINE");
41 if (!dtline)
42 logmsg(WHO,100,FATAL,"DTLINE not set");
43
44 if (qmail_open(&qqt) == -1)
45 logmsg(WHO,111,FATAL,"unable to fork: ");
47 if (buffer_copy(&bo,&bi) != 0)
48 logmsg(WHO,111,FATAL,"unable to read message: ");
49 buffer_flush(&bo);
50
51 num[fmt_ulong(num,qmail_qp(&qqt))] = 0;
52
54 while (*++argv) qmail_to(&qqt,*argv);
55 qqx = qmail_close(&qqt);
56 if (*qqx) logmsg(WHO,*qqx == 'D' ? 100 : 111,FATAL,qqx + 1);
57 logmsg(WHO,0,LOG,B("qp ",num));
58}
int main()
Definition: chkshsgr.c:6
stralloc sender
Definition: fastforward.c:71
char * dtline
Definition: fastforward.c:70
ssize_t mywrite(int fd, char *buf, int len)
Definition: forward.c:16
void die_nomem()
Definition: forward.c:12
char inbuf[BUFFER_INSIZE]
Definition: forward.c:22
struct qmail qqt
Definition: forward.c:14
char num[FMT_ULONG]
Definition: forward.c:27
buffer bi
Definition: forward.c:23
char outbuf[1]
Definition: forward.c:24
buffer bo
Definition: forward.c:25
#define WHO
Definition: forward.c:10
char buf[100+FMT_ULONG]
Definition: hier.c:10
int fd
void qmail_to(struct qmail *, char *)
Definition: qmail.c:83
void qmail_from(struct qmail *, char *)
Definition: qmail.c:73
void qmail_put(struct qmail *, char *, int)
Definition: qmail.c:63
char * qmail_close(struct qmail *)
Definition: qmail.c:90
unsigned long qmail_qp(struct qmail *)
Definition: qmail.c:53
void qmail_puts(struct qmail *, char *)
Definition: qmail.c:68
int qmail_open(struct qmail *)
Definition: qmail.c:21
Definition: qmail.h:6