#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#define MAXOPTS 16
#define TRY(exp) do { \
if ((exp) == -1) { \
fprintf(stderr, "%s:%d: '%s' failed: ", \
__FILE__, \
__LINE__, \
#exp \
); perror(NULL); \
exit(81); \
} \
} while(0)
int main(int argc, char **argv)
{
char *options[MAXOPTS];
char *val = NULL;
int opt = 0;
pid_t childpid;
int pfds[2];
#ifdef HAVE_QMAIL_RELAYCLIENT
if (getenv("RELAYCLIENT")) {
TRY(execlp("qmail-queue", "qmail-queue", NULL));
}
#endif
options[opt++] = "spamc";
if ((val = getenv("SPAMDSOCK")) != NULL) {
options[opt++] = "-U";
options[opt++] = val;
}
if ((val = getenv("SPAMDHOST")) != NULL) {
options[opt++] = "-d";
options[opt++] = val;
}
if ((val = getenv("SPAMDPORT")) != NULL) {
options[opt++] = "-p";
options[opt++] = val;
}
if ((val = getenv("SPAMDSSL")) != NULL) {
options[opt++] = "-S";
}
if ((val = getenv("SPAMDLIMIT")) != NULL) {
options[opt++] = "-s";
options[opt++] = val;
}
if ((val = getenv("SPAMDUSER")) != NULL) {
options[opt++] = "-u";
options[opt++] = val;
}
options[opt] = NULL;
TRY(pipe(pfds));
TRY(childpid = fork());
if (childpid == 0) {
TRY(close(1));
TRY(dup(pfds[1]));
TRY(close(pfds[0]));
TRY(execvp("spamc", options));
}
else {
TRY(close(0));
TRY(dup(pfds[0]));
TRY(close(pfds[1]));
TRY(execlp("qmail-queue", "qmail-queue", NULL));
}
return 81;
}