19void report(buffer *log,
int wstat,
char *s,
int len)
26 if (wait_crashed(wstat)) { buffer_putsflush(log,
"Zqmail-spawn: qmail-remote crashed.\n");
return; }
28 switch (wait_exitcode(wstat)) {
30 case 111: buffer_putsflush(log,
"Zqmail-rspawn: Unable to run qmail-remote.\n");
break;
31 default: buffer_putsflush(log,
"Dqmail-rspawn: Unable to run qmail-remote.\n");
return;
34 if (!len) { buffer_putsflush(log,
"Zqmail-rspawn: qmail-remote produced no output.\n");
return; }
39 for (
k = 0;
k < len; ++
k)
41 if (s[
j] ==
'K') { result = 1;
break; }
42 if (s[
j] ==
'Z') { result = 0;
break; }
43 if (s[
j] ==
'D')
break;
50 case 's': orr = 0;
break;
55 case 1: buffer_put(log,
"K",1);
break;
56 case 0: buffer_put(log,
"Z",1);
break;
57 case -1: buffer_put(log,
"D",1);
break;
62 buffer_puts(log,s + 1);
66 case 'Z':
case 'D':
case 'K':
67 buffer_puts(log,s +
k + 1);
73int spawn(
int fdmess,
int fdout,
const char *s,
char *r,
const int at)
80 if (!stat(
"control/dkimdomains",&st))
81 args[0] =
"qmail-dksign";
83 args[0] =
"qmail-remote";
90 if (chdir(
"queue/mess") == -1)
_exit(62);
93 if (fd_move(0,fdmess) == -1)
_exit(63);
95 if (fd_copy(2,1) == -1)
_exit(63);
97 if (errno)
_exit(111);
int spawn(int fdmess, int fdout, const char *s, char *r, const int at)
void report(buffer *log, int wstat, char *s, int len)
void initialize(int argc, char **argv)