18void report(buffer *log,
int wstat,
char *s,
int len)
25 if (wait_crashed(wstat)) { buffer_putsflush(log,
"Zqmail-spawn: qmail-remote crashed.\n");
return; }
27 switch (wait_exitcode(wstat)) {
29 case 111: buffer_putsflush(log,
"Zqmail-rspawn: Unable to run qmail-remote.\n");
break;
30 default: buffer_putsflush(log,
"Dqmail-rspawn: Unable to run qmail-remote. \n");
return;
33 if (!len) { buffer_putsflush(log,
"Zqmail-rspawn: qmail-remote produced no output.\n");
return; }
38 for (
k = 0;
k < len; ++
k)
40 if (s[
j] ==
'K') { result = 1;
break; }
41 if (s[
j] ==
'Z') { result = 0;
break; }
42 if (s[
j] ==
'D')
break;
49 case 's': orr = 0;
break;
54 case 1: buffer_put(log,
"K",1);
break;
55 case 0: buffer_put(log,
"Z",1);
break;
56 case -1: buffer_put(log,
"D",1);
break;
61 buffer_puts(log,s + 1);
65 case 'Z':
case 'D':
case 'K':
66 buffer_puts(log,s +
k + 1);
72int spawn(
int fdmess,
int fdout,
const char *s,
char *r,
const int at)
79 if (!stat(
"control/dkimdomains",&st))
80 args[0] =
"qmail-dksign";
82 args[0] =
"qmail-remote";
88 if (chdir(
"queue/mess") == -1)
_exit(110);
91 if (fd_move(0,fdmess) == -1)
_exit(111);
93 if (fd_copy(2,1) == -1)
_exit(111);
95 if (errno)
_exit(111);