X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fslocal.c;h=13d05116c2668e808204e2df8f80b2b3d1e28f5c;hb=c33891a4d5265bdbbbadae72ab6d8d92589636ca;hp=1396cc29e850b285bc3098fbe7b73776c774337f;hpb=38615191e71744b066425e0c44412b62dbe49cc2;p=mmh diff --git a/uip/slocal.c b/uip/slocal.c index 1396cc2..13d0511 100644 --- a/uip/slocal.c +++ b/uip/slocal.c @@ -2,8 +2,6 @@ /* * slocal.c -- asynchronously filter and deliver new mail * - * $Id$ - * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for * complete copyright information. @@ -36,16 +34,6 @@ #include #include -#ifdef INITGROUPS_HEADER -#include INITGROUPS_HEADER -#else -/* On AIX 4.1, initgroups() is defined and even documented (giving the parameter - types as char* and int), but doesn't have a prototype in any of the system - header files. AIX 4.3, SunOS 4.1.3, and ULTRIX 4.2A have the same - problem. */ -extern int initgroups(char*, int); -#endif - /* This define is needed for Berkeley db v2 and above to * make the header file expose the 'historical' ndbm APIs. * We define it unconditionally because this is simple and @@ -192,7 +180,7 @@ static int timely (char *, char *); static int usr_file (int, char *, int); static int usr_pipe (int, char *, char *, char **, int); static int usr_folder (int, char *); -static RETSIGTYPE alrmser (int); +static void alrmser (int); static void get_sender (char *, char **); static int copy_message (int, char *, int); static void verbose_printf (char *fmt, ...); @@ -441,11 +429,7 @@ localmail (int fd, char *mdlvr) verbose_printf ("(delivering to standard mail spool)\n"); /* last resort - deliver to standard mail spool */ -#ifdef SLOCAL_MBOX return usr_file (fd, mbox, MBOX_FORMAT); -#else - return usr_file (fd, mbox, MMDF_FORMAT); -#endif } @@ -959,7 +943,7 @@ logged_in (void) while ((utp = getutent()) != NULL) { if ( -#ifdef HAVE_UTMP_UT_TYPE +#ifdef HAVE_STRUCT_UTMP_UT_TYPE utp->ut_type == USER_PROCESS && #endif @@ -1067,7 +1051,11 @@ usr_file (int fd, char *mailbox, int mbx_style) } /* close and unlock file */ - mbx_close (mailbox, md); + if (mbx_close (mailbox, md) == NOTOK) { + if (verbose) + adorn ("", "error closing:"); + return -1; + } if (verbose) verbose_printf (", success.\n"); @@ -1204,7 +1192,7 @@ usr_pipe (int fd, char *cmd, char *pgm, char **vec, int suppress) * Ruthlessly kill the child and anything * else in its process group. */ - KILLPG(child_id, SIGKILL); + killpg(child_id, SIGKILL); if (verbose) verbose_printf (", timed-out; terminated\n"); return -1; @@ -1213,13 +1201,9 @@ usr_pipe (int fd, char *cmd, char *pgm, char **vec, int suppress) } -static RETSIGTYPE +static void alrmser (int i) { -#ifndef RELIABLE_SIGNALS - SIGNAL (SIGALRM, alrmser); -#endif - longjmp (myctx, DONE); } @@ -1274,12 +1258,12 @@ copy_message (int qd, char *tmpfil, int fold) int i, first = 1, fd1, fd2; char buffer[BUFSIZ]; FILE *qfp, *ffp; + char *tfile = NULL; - strcpy (tmpfil, m_tmpfil (invo_name)); - - /* open temporary file to put message in */ - if ((fd1 = open (tmpfil, O_RDWR | O_CREAT | O_TRUNC, 0600)) == -1) - return -1; + tfile = m_mktemp2(NULL, invo_name, &fd1, NULL); + if (tfile == NULL) return -1; + fchmod(fd1, 0600); + strncpy (tmpfil, tfile, BUFSIZ); if (!fold) { while ((i = read (qd, buffer, sizeof(buffer))) > 0) @@ -1333,9 +1317,6 @@ you_lose: if (first) { first = 0; if (!strncmp (buffer, "From ", i)) { -#ifdef RPATHS - char *fp, *cp, *hp, *ep; -#endif /* get copy of envelope information ("From " line) */ envelope = getcpy (buffer); @@ -1346,33 +1327,6 @@ you_lose: goto fputs_error; #endif -#ifdef RPATHS - /* - * 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", - ep - hp, hp, cp - fp, fp); - } else { - /* return path for standard domain addressing */ - snprintf (buffer, sizeof(buffer), "Return-Path: %.*s\n", - cp - fp, fp); - } - - /* Add Return-Path header to message */ - fputs (buffer, ffp); - if (ferror (ffp)) - goto fputs_error; -#endif /* Put the delivery date in message */ fputs (ddate, ffp); if (ferror (ffp))