Insourced push() into send.
[mmh] / uip / send.c
index 09bbcf8..5054273 100644 (file)
@@ -273,10 +273,37 @@ main(int argc, char **argv)
                st.st_ino = 0;
        }
        if (pushsw) {
-               push();
+               /* push a fork into the background */
+               pid_t pid;
+
+               switch (pid = fork()) {
+               case -1:
+                       /* fork error */
+                       advise(NULL, "unable to fork, so can't push...");
+                       break;
+
+               default:
+                       /* parent, just exit */
+                       done(0);
+
+               case 0:
+                       /* child, block a few signals and continue */
+                       SIGNAL(SIGHUP, SIG_IGN);
+                       SIGNAL(SIGINT, SIG_IGN);
+                       SIGNAL(SIGQUIT, SIG_IGN);
+                       SIGNAL(SIGTERM, SIG_IGN);
+#ifdef SIGTSTP
+                       SIGNAL(SIGTSTP, SIG_IGN);
+                       SIGNAL(SIGTTIN, SIG_IGN);
+                       SIGNAL(SIGTTOU, SIG_IGN);
+#endif
+                       freopen("/dev/null", "r", stdin);
+                       freopen("/dev/null", "w", stdout);
+                       break;
+               }
        }
        status = 0;
-       vec[0] = mhbasename(postproc);
+       vec[0] = "spost";
        closefds(3);
 
        for (msgnum = 0; msgnum < nfiles; msgnum++) {
@@ -611,7 +638,7 @@ make_mime_composition_file_entry(char *file_name)
 
 /*
 ** The back-end of the message sending back-end.
-** Annotate original message, and call `postproc' to send message.
+** Annotate original message, and call `spost' to send message.
 */
 static int
 sendaux(char **vec, int vecp, char *drft, struct stat *st)
@@ -621,7 +648,7 @@ sendaux(char **vec, int vecp, char *drft, struct stat *st)
        char backup[BUFSIZ];
 
        /*
-       ** fd collects the output of postproc, and is used for the
+       ** fd collects the output of spost, and is used for the
        ** failure notice if we need to send one in alert().
        */
        fd = pushsw ? tmp_fd() : NOTOK;
@@ -650,9 +677,9 @@ sendaux(char **vec, int vecp, char *drft, struct stat *st)
                        dup2(fd, fileno(stderr));
                        close(fd);
                }
-               execvp(postproc, vec);
+               execvp(*vec, vec);
                fprintf(stderr, "unable to exec ");
-               perror(postproc);
+               perror(*vec);
                _exit(-1);
                break;  /* NOT REACHED */
 
@@ -664,7 +691,7 @@ sendaux(char **vec, int vecp, char *drft, struct stat *st)
                        }
                } else {
                        /*
-                       ** If postproc failed, and we have good fd (which
+                       ** If spost failed, and we have good fd (which
                        ** means we pushed), then mail error message
                        ** (and possibly the draft) back to the user.
                        */
@@ -691,7 +718,7 @@ sendaux(char **vec, int vecp, char *drft, struct stat *st)
 
 /*
 ** Mail error notification (and possibly a copy of the
-** message) back to the user, using the mailproc
+** message) back to the user, using mhmail(1).
 */
 static void
 alert(char *file, int out)
@@ -735,10 +762,10 @@ alert(char *file, int out)
                /* create subject for error notification */
                snprintf(buf, sizeof(buf), "send failed on %s",
                                forwsw ? "enclosed draft" : file);
-               execlp(mailproc, mhbasename(mailproc), getusername(),
+               execlp("mhmail", "mhmail", getusername(),
                                "-subject", buf, NULL);
                fprintf(stderr, "unable to exec ");
-               perror(mailproc);
+               perror("mhmail");
                _exit(-1);
 
        default:  /* no waiting... */