* Bug #15213, #18635: The use of the insecure m_scratch() and
[mmh] / uip / slocal.c
index 817a411..f24228a 100644 (file)
@@ -412,7 +412,8 @@ main (int argc, char **argv)
     /* deliver the message */
     status = localmail (fd, mdlvr);
 
-    return done (status != -1 ? RCV_MOK : RCV_MBX);
+    done (status != -1 ? RCV_MOK : RCV_MBX);
+    return 1;
 }
 
 
@@ -683,7 +684,7 @@ static int
 split (char *cp, char **vec)
 {
     int i;
-    char *s;
+    unsigned char *s;
 
     s = cp;
 
@@ -958,7 +959,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
@@ -1232,8 +1233,8 @@ static void
 get_sender (char *envelope, char **sender)
 {
     int i;
-    char *cp;
-    char buffer[BUFSIZ];
+    unsigned char *cp;
+    unsigned char buffer[BUFSIZ];
 
     if (envelope == NULL) {
        *sender = getcpy ("");
@@ -1273,12 +1274,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)
@@ -1360,11 +1361,11 @@ you_lose:
                    /* 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);
+                       (int)(ep - hp), hp, (int)(cp - fp), fp);
                } else {
                    /* return path for standard domain addressing */
                    snprintf (buffer, sizeof(buffer), "Return-Path: %.*s\n",
-                       cp - fp, fp);
+                       (int)(cp - fp), fp);
                }
 
                /* Add Return-Path header to message */
@@ -1412,7 +1413,7 @@ static char *
 trim (char *cp)
 {
     char buffer[BUFSIZ*4];
-    char *bp, *sp;
+    unsigned char *bp, *sp;
 
     if (cp == NULL)
        return NULL;