diff options
Diffstat (limited to 'sqmail-4.3.07/src/condredirect.c')
-rw-r--r-- | sqmail-4.3.07/src/condredirect.c | 81 |
1 files changed, 0 insertions, 81 deletions
diff --git a/sqmail-4.3.07/src/condredirect.c b/sqmail-4.3.07/src/condredirect.c deleted file mode 100644 index 2e5cc11..0000000 --- a/sqmail-4.3.07/src/condredirect.c +++ /dev/null @@ -1,81 +0,0 @@ -#include <unistd.h> -#include "sig.h" -#include "exit.h" -#include "env.h" -#include "logmsg.h" -#include "wait.h" -#include "seek.h" -#include "qmail.h" -#include "buffer.h" -#include "fmt.h" - -#define WHO "condredirect" - -struct qmail qqt; - -ssize_t mywrite(int fd,char *buf,int len) -{ - qmail_put(&qqt,buf,len); - return len; -} - -char inbuf[BUFSIZE_LINE]; -buffer bi = BUFFER_INIT(read,0,inbuf,sizeof(inbuf)); -char outbuf[BUFSIZE_LINE]; -buffer bo = BUFFER_INIT(mywrite,-1,outbuf,sizeof(outbuf)); - -char num[FMT_ULONG]; - -int main(int argc,char **argv) -{ - char *sender; - char *dtline; - int pid; - int wstat; - char *qqx; - - if (!argv[1] || !argv[2]) - logmsg(WHO,100,USAGE,"condredirect newaddress program [ arg ... ]"); - - pid = fork(); - if (pid == -1) - logmsg(WHO,111,FATAL,"unable to fork: "); - if (pid == 0) { - execvp(argv[2],argv + 2); - if (errno) _exit(111); - _exit(100); - } - if (wait_pid(&wstat,pid) == -1) - logmsg(WHO,111,FATAL,"wait failed"); - if (wait_crashed(wstat)) - logmsg(WHO,111,FATAL,"child crashed"); - switch (wait_exitcode(wstat)) { - case 0: break; - case 111: logmsg(WHO,111,FATAL,"temporary child error"); - default: _exit(0); - } - - if (seek_begin(0) == -1) - logmsg(WHO,111,FATAL,"unable to rewind: "); - sig_pipeignore(); - - sender = env_get("SENDER"); - if (!sender) logmsg(WHO,100,ERROR,"SENDER not set"); - dtline = env_get("DTLINE"); - if (!dtline) logmsg(WHO,100,ERROR,"DTLINE not set"); - - if (qmail_open(&qqt) == -1) - logmsg(WHO,111,FATAL,"unable to fork: "); - qmail_puts(&qqt,dtline); - if (buffer_copy(&bo,&bi) != 0) - logmsg(WHO,111,FATAL,"unable to read message: "); - buffer_flush(&bo); - - num[fmt_ulong(num,qmail_qp(&qqt))] = 0; - - qmail_from(&qqt,sender); - qmail_to(&qqt,argv[1]); - qqx = qmail_close(&qqt); - if (*qqx) logmsg(WHO,*qqx == 'D' ? 100 : 111,FATAL,qqx + 1); - logmsg(WHO,0,LOG,B("qp ",num)); -} |