};
-/* global maildelivery file */
-char *maildelivery = NMHETCDIR"/maildelivery";
-
-
static int globbed = 0; /* have we built "vars" table yet? */
static int parsed = 0; /* have we built header field table yet */
static int utmped = 0; /* have we scanned umtp(x) file yet */
static int
localmail(int fd, char *mdlvr)
{
+ char buf[BUFSIZ];
+
/* delivery according to personal Maildelivery file */
if (usr_delivery(fd, mdlvr ? mdlvr : ".maildelivery", 0) != -1) {
return 0;
}
/* delivery according to global Maildelivery file */
- if (usr_delivery(fd, maildelivery, 1) != -1) {
+ snprintf(buf, sizeof buf, "%s/%s", mhetcdir, "maildelivery");
+ if (usr_delivery(fd, buf, 1) != -1) {
return 0;
}
if (verbose) {
vec[1] = folder;
vec[2] = NULL;
- return usr_pipe(fd, "rcvstore", rcvstoreproc, vec, 1);
+ return usr_pipe(fd, "rcvstore", "rcvstore", vec, 1);
}
/*
usr_pipe(int fd, char *cmd, char *pgm, char **vec, int suppress)
{
pid_t child_id;
- int bytes, seconds, status;
+ int bytes, seconds, status, n;
struct stat st;
+ char *path;
if (verbose && !suppress) {
verbose_printf("delivering to pipe \"%s\"", cmd);
if (fd != 3) {
dup2(fd, 3);
}
- closefds(4);
+ for (n=4; n<OPEN_MAX; n++) {
+ close(n);
+ }
#ifdef TIOCNOTTY
if ((fd = open("/dev/tty", O_RDWR)) != -1) {
/* put in own process group */
setpgid((pid_t) 0, getpid());
+ path = getenv("PATH");
*environ = NULL;
m_putenv("USER", pw->pw_name);
m_putenv("HOME", pw->pw_dir);
m_putenv("SHELL", pw->pw_shell);
+ m_putenv("PATH", path);
execvp(pgm, vec);
_exit(-1);
** Ruthlessly kill the child and anything
** else in its process group.
*/
- KILLPG(child_id, SIGKILL);
+ kill(-child_id, SIGKILL);
if (verbose)
verbose_printf(", timed-out; terminated\n");
return -1;
FILE *qfp, *ffp;
char *tfile = NULL;
- tfile = m_mktemp2(NULL, invo_name, &fd1, NULL);
+ tfile = m_mktemp2("/tmp/", invo_name, &fd1, NULL);
if (tfile == NULL) return -1;
fchmod(fd1, 0600);
strncpy(tmpfil, tfile, BUFSIZ);
if (first) {
first = 0;
if (strncmp(buffer, "From ", i)==0) {
- char *fp, *cp, *hp, *ep;
/*
** get copy of envelope information
** ("From " line)
*/
envelope = getcpy(buffer);
- /*
- ** Now create a "Return-Path:" line
- ** from the "From " line.
- */
- hp = cp = strchr(fp = envelope + i, ' ');
- while ((hp = strchr(++hp, 'r'))) {
- if (uprf(hp, "remote from")) {
- hp = strrchr(hp, ' ');
- break;
- }
- }
- if (hp) {
- /*
- ** return path for UUCP style
- ** addressing
- */
- ep = strchr(++hp, '\n');
- snprintf(buffer, sizeof(buffer), "Return-Path: %.*s!%.*s\n", (int)(ep - hp), hp, (int)(cp - fp), fp);
- } else {
- /*
- ** return path for standard domain
- ** addressing
- */
- snprintf(buffer, sizeof(buffer), "Return-Path: %.*s\n", (int)(cp - fp), fp);
- }
-
- /* Add Return-Path header to message */
- fputs(buffer, ffp);
- if (ferror(ffp)) {
- goto fputs_error;
- }
/* Put the delivery date in message */
fputs(ddate, ffp);
if (ferror(ffp)) {