Removed -(no)push and -(no)forward flags from send, spost and whatnow.
authormarkus schnalke <meillo@marmaro.de>
Tue, 10 Apr 2012 21:24:07 +0000 (23:24 +0200)
committermarkus schnalke <meillo@marmaro.de>
Tue, 10 Apr 2012 21:24:07 +0000 (23:24 +0200)
We don't send directly (with SMTP) anymore. We only execute sendmail,
which, on modern systems, takes few time. Thus we do it directly
instead of having more complexity for the rare wish to run sendmail in
the background and also be unable to deal with possible errors directly.

man/inc.man1
man/send.man1
man/spost.man8
man/whatnow.man1
uip/send.c
uip/spost.c
uip/whatnow.c

index 26ec56e..334bcd7 100644 (file)
@@ -178,7 +178,7 @@ in the background and going on to other things.
 .fi
 
 .SH "SEE ALSO"
-mhmail(1), scan(1), mh\-mail(5), post(8)
+scan(1), mh\-mail(5)
 
 .SH DEFAULTS
 .nf
index 09e3f40..a61fc37 100644 (file)
@@ -10,8 +10,6 @@ send \- send a message
 .B send
 .RB [ \-alias
 .IR aliasfile ]
-.RB [ \-forward " | " \-noforward ]
-.RB [ \-push " | " \-nopush ]
 .RB [ \-verbose " | " \-noverbose ]
 .RB [ \-watch " | " \-nowatch ]
 .RB [ msg
@@ -70,26 +68,6 @@ Content-Disposition: attachment; filename="VERSION"
 .fi
 .PP
 If
-.B \-push
-is specified,
-.B send
-will detach itself from the user's
-terminal and perform its actions in the background.  If
-.BR push 'd
-and the draft can't be sent, then an error message will be sent (using
-.BR mhmail )
-back to the user.  If
-.B \-forward
-is given, then a copy
-of the draft will be attached to this failure notice.  Using
-.B \-push
-differs from putting
-.B send
-in the background because the output is
-trapped and analyzed by
-.BR nmh .
-.PP
-If
 .B \-verbose
 is specified,
 .B send
@@ -211,8 +189,6 @@ comp(1), dist(1), forw(1), repl(1), mh\-alias(5), spost(8)
 .SH DEFAULTS
 .nf
 .RB ` msg "' defaults to the current message in the draft folder"
-.RB ` \-forward '
-.RB ` \-nopush '
 .RB ` \-noverbose '
 .RB ` \-nowatch '
 .fi
index 00f1d7b..1e0429d 100644 (file)
@@ -13,7 +13,6 @@ spost \- feed a message to sendmail
 .IR aliasfile
 .RB " | " \-noalias ]
 .RB [ \-dist ]
-.RB [ \-push " | " \-nopush ]
 .RB [ \-verbose " | " \-noverbose ]
 .RB [ \-watch " | " \-nowatch ]
 .I file
@@ -122,8 +121,7 @@ does
 consult the user's profile.
 
 .SH "SEE ALSO"
-mhmail(1), send(1), mh\-mail(5), mh\-alias(5), mh\-tailor(5),
-refile(1),
+send(1), mh\-mail(5), mh\-alias(5), mh\-tailor(5), refile(1),
 .I "Standard for the Format of ARPA Internet Text Messages"
 (RFC\-822)
 
@@ -131,7 +129,6 @@ refile(1),
 .nf
 .RB ` \-noverbose '
 .RB ` \-nowatch '
-.RB ` \-nopush '
 .fi
 
 .SH CONTEXT
index 0406e45..ce6c9c2 100644 (file)
@@ -64,9 +64,6 @@ send the message
 .B send \-watch
 send the message and monitor the delivery process
 .TP \w'refilezzzzfolderz'u
-.B push
-send the message in the background
-.TP \w'refilezzzzfolderz'u
 .B quit
 preserve the draft and exit
 .TP \w'refilezzzzfolderz'u
@@ -101,17 +98,9 @@ response, any valid switch to the editor is valid.
 .PP
 For the
 .B send
-and
-.B push
-responses, any valid switch to
+response, any valid switch to
 .BR send (1)
-is valid (as
-.B push
-merely invokes
-.B send
-with the
-.B \-push
-option).
+is valid.
 .PP
 For the
 .B refile
index a2e9932..ed4aca0 100644 (file)
@@ -22,8 +22,6 @@
 #include <time.h>
 
 int debugsw = 0;  /* global */
-int forwsw  = 1;
-int pushsw  = 0;
 int verbsw  = 0;
 char *altmsg   = NULL;
 char *annotext = NULL;
@@ -46,8 +44,6 @@ static FILE *composition_file;  /* composition file pointer */
 */
 static int sendsbr(char **, int, char *, struct stat *, int);
 static void armed_done(int) NORETURN;
-static void alert(char *, int);
-static int tmp_fd(void);
 static void anno(struct stat *);
 static int sendaux(char **, int, char *, struct stat *);
 static int attach(char *);
@@ -61,25 +57,17 @@ static struct swit switches[] = {
        { "alias aliasfile", 0 },
 #define DEBUGSW  1
        { "debug", -5 },
-#define FORWSW  2
-       { "forward", 0 },
-#define NFORWSW  3
-       { "noforward", 0 },
-#define PUSHSW  4
-       { "push", 0 },
-#define NPUSHSW  5
-       { "nopush", 0 },
-#define VERBSW  6
+#define VERBSW  2
        { "verbose", 0 },
-#define NVERBSW  7
+#define NVERBSW  3
        { "noverbose", 0 },
-#define WATCSW  8
+#define WATCSW  4
        { "watch", 0 },
-#define NWATCSW  9
+#define NWATCSW  5
        { "nowatch", 0 },
-#define VERSIONSW  10
+#define VERSIONSW  6
        { "version", 0 },
-#define HELPSW  11
+#define HELPSW  7
        { "help", 0 },
        { NULL, 0 }
 };
@@ -134,20 +122,6 @@ main(int argc, char **argv)
                                print_version(invo_name);
                                done(1);
 
-                       case PUSHSW:
-                               pushsw++;
-                               continue;
-                       case NPUSHSW:
-                               pushsw = 0;
-                               continue;
-
-                       case FORWSW:
-                               forwsw++;
-                               continue;
-                       case NFORWSW:
-                               forwsw = 0;
-                               continue;
-
                        case VERBSW:
                                verbsw++;
                                vec[vecp++] = --cp;
@@ -267,36 +241,6 @@ main(int argc, char **argv)
                st.st_dev = 0;
                st.st_ino = 0;
        }
-       if (pushsw) {
-               /* 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] = "spost";
        for (n=3; n<OPEN_MAX; n++) {
@@ -641,15 +585,9 @@ static int
 sendaux(char **vec, int vecp, char *drft, struct stat *st)
 {
        pid_t child_id;
-       int status, fd;
+       int status;
        char backup[BUFSIZ];
 
-       /*
-       ** 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;
-
        vec[vecp++] = drft;
        if (distfile && distout(drft, distfile, backup) == NOTOK) {
                done(1);
@@ -663,17 +601,7 @@ sendaux(char **vec, int vecp, char *drft, struct stat *st)
                break;  /* NOT REACHED */
 
        case 0:
-               /*
-               ** child process -- send it
-               **
-               ** If fd is ok, then we are pushing and fd points to temp
-               ** file, so capture anything on stdout and stderr there.
-               */
-               if (fd != NOTOK) {
-                       dup2(fd, fileno(stdout));
-                       dup2(fd, fileno(stderr));
-                       close(fd);
-               }
+               /* child process -- send it */
                execvp(*vec, vec);
                fprintf(stderr, "unable to exec ");
                perror(*vec);
@@ -687,17 +615,8 @@ sendaux(char **vec, int vecp, char *drft, struct stat *st)
                                anno(st);
                        }
                } else {
-                       /*
-                       ** If spost failed, and we have good fd (which
-                       ** means we pushed), then mail error message
-                       ** (and possibly the draft) back to the user.
-                       */
-                       if (fd != NOTOK) {
-                               alert(drft, fd);
-                               close(fd);
-                       } else {
-                               advise(NULL, "message not delivered to anyone");
-                       }
+                       /* spost failed */
+                       advise(NULL, "message not delivered to anyone");
                        if (distfile) {
                                unlink(drft);
                                if (rename(backup, drft) == NOTOK) {
@@ -713,86 +632,6 @@ 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 mhmail(1).
-*/
-static void
-alert(char *file, int out)
-{
-       pid_t child_id;
-       int in;
-       char buf[BUFSIZ];
-
-       switch (child_id = fork()) {
-       case NOTOK:
-               /* oops -- fork error */
-               advise("fork", "unable to");
-
-       case OK:
-               /* child process -- send it */
-               SIGNAL(SIGHUP, SIG_IGN);
-               SIGNAL(SIGINT, SIG_IGN);
-               SIGNAL(SIGQUIT, SIG_IGN);
-               SIGNAL(SIGTERM, SIG_IGN);
-               if (forwsw) {
-                       if ((in = open(file, O_RDONLY)) == NOTOK) {
-                               admonish(file, "unable to re-open");
-                       } else {
-                               lseek(out, (off_t) 0, SEEK_END);
-                               strncpy(buf, "\nMessage not delivered to anyone.\n", sizeof(buf));
-                               write(out, buf, strlen(buf));
-                               strncpy(buf, "\n------- Unsent Draft\n\n", sizeof(buf));
-                               write(out, buf, strlen(buf));
-                               cpydgst(in, out, file, "temporary file");
-                               close(in);
-                               strncpy(buf, "\n------- End of Unsent Draft\n", sizeof(buf));
-                               write(out, buf, strlen(buf));
-                               if (rename(file, strncpy(buf, m_backup(file), sizeof(buf))) == NOTOK) {
-                                       admonish(buf, "unable to rename %s to", file);
-                               }
-                       }
-               }
-               lseek(out, (off_t) 0, SEEK_SET);
-               dup2(out, fileno(stdin));
-               close(out);
-               /* create subject for error notification */
-               snprintf(buf, sizeof(buf), "send failed on %s",
-                               forwsw ? "enclosed draft" : file);
-               execlp("mhmail", "mhmail", getusername(),
-                               "-subject", buf, NULL);
-               fprintf(stderr, "unable to exec ");
-               perror("mhmail");
-               _exit(-1);
-
-       default:  /* no waiting... */
-               break;
-       }
-}
-
-
-static int
-tmp_fd(void)
-{
-       int fd;
-       char *tfile = NULL;
-
-       tfile = m_mktemp2(NULL, invo_name, &fd, NULL);
-       if (tfile == NULL) return NOTOK;
-       fchmod(fd, 0600);
-
-       if (debugsw) {
-               advise(NULL, "temporary file %s selected", tfile);
-       } else {
-               if (unlink(tfile) == NOTOK) {
-                       advise(tfile, "unable to remove");
-               }
-       }
-
-       return fd;
-}
-
-
 static void
 anno(struct stat *st)
 {
index 369f03e..093bad5 100644 (file)
@@ -40,11 +40,7 @@ struct swit switches[] = {
        { "debug", -5 },
 #define DISTSW  9
        { "dist", -4 },  /* interface from dist */
-#define PUSHSW  10  /* fork to sendmail then exit */
-       { "push", -4 },
-#define NPUSHSW  11  /* exec sendmail */
-       { "nopush", -6 },
-#define LIBSW  12
+#define LIBSW  10
        { "library directory", -7 },
        { NULL, 0 }
 };
@@ -113,7 +109,6 @@ static int badmsg = 0;  /* message has bad semantics */
 static int verbose = 0;  /* spell it out */
 static int debug = 0;  /* debugging post */
 static int watch = 0;  /* watch the delivery process */
-static int pushflg = 0;  /* if going to fork to sendmail */
 static int aliasflg = 0;  /* if going to process aliases */
 
 static unsigned msgflags = 0;  /* what we've seen */
@@ -205,13 +200,6 @@ main(int argc, char **argv)
                                watch = 0;
                                continue;
 
-                       case PUSHSW:
-                               pushflg++;
-                               continue;
-                       case NPUSHSW:
-                               pushflg = 0;
-                               continue;
-
                        case ALIASW:
                                if (!(cp = *argp++) || *cp == '-')
                                        adios(NULL, "missing argument to %s",
@@ -319,7 +307,6 @@ main(int argc, char **argv)
        *argp++ = "-i";  /* don't stop on "." */
        if (watch || verbose) {
                *argp++ = "-v";
-               pushflg = 0;
        }
        *argp = NULL;
 
@@ -341,21 +328,6 @@ main(int argc, char **argv)
        }
        unlink(tmpfil);
 
-       if (pushflg) {
-               /* fork to a child to run sendmail */
-               switch (fork()) {
-               case NOTOK:
-                       fprintf(verbose ? stdout : stderr,
-                                       "%s: can't fork to %s\n",
-                                       invo_name, sendmail);
-                       exit(-1);
-               case OK:
-                       /* we're the child .. */
-                       break;
-               default:
-                       exit(0);
-               }
-       }
        execv(sendmail, sargv);
        adios(sendmail, "can't exec");
        return -1;
@@ -694,8 +666,7 @@ process_bccs(char *origmsg)
                fprintf(out, "------------\n");
                fclose(out);
 
-               snprintf(buf, sizeof buf, "send%s %s",
-                               pushflg ? " -push" : "", bccdraft);
+               snprintf(buf, sizeof buf, "send %s", bccdraft);
                if (system(buf) != 0) {
                        admonish(invo_name, "Problems to send Bcc to %s",
                                        mp->m_text);
index 0576ff8..efdf02d 100644 (file)
@@ -70,23 +70,21 @@ static struct swit aleqs[] = {
        { "list", 0 },
 #define SENDSW  4
        { "send [<switches>]", 0 },
-#define PUSHSW  5
-       { "push [<switches>]", 0 },
-#define QUITSW  6
+#define QUITSW  5
        { "quit", 0 },
-#define DELETESW  7
+#define DELETESW  6
        { "delete", 0 },
-#define CDCMDSW  8
+#define CDCMDSW  7
        { "cd [directory]", 0 },
-#define PWDCMDSW  9
+#define PWDCMDSW  8
        { "pwd", 0 },
-#define LSCMDSW  10
+#define LSCMDSW  9
        { "ls", 0 },
-#define ATTACHCMDSW  11
+#define ATTACHCMDSW  10
        { "attach", 0 },
-#define DETACHCMDSW  12
+#define DETACHCMDSW  11
        { "detach [-n]", 0 },
-#define ALISTCMDSW  13
+#define ALISTCMDSW  12
        { "alist", 0 },
        { NULL, 0 }
 };
@@ -98,7 +96,7 @@ static char *myprompt = "\nWhat now? ";
 */
 static int editfile(char **, char **, char *, int, struct msgs *,
        char *, char *, int);
-static int sendfile(char **, char *, int);
+static int sendfile(char **, char *);
 static int refile(char **, char *);
 static int removefile(char *);
 static void writelscmd(char *, int, char **);
@@ -253,15 +251,9 @@ main(int argc, char **argv)
                        removefile(drft);
                        done(1);
 
-               case PUSHSW:
-                       /* Send draft in background */
-                       if (sendfile(++argp, drft, 1))
-                               done(1);
-                       break;
-
                case SENDSW:
                        /* Send draft */
-                       sendfile(++argp, drft, 0);
+                       sendfile(++argp, drft);
                        break;
 
                case REFILEOPT:
@@ -752,7 +744,7 @@ copyf(char *ifile, char *ofile)
 */
 
 static int
-sendfile(char **arg, char *file, int pushsw)
+sendfile(char **arg, char *file)
 {
        pid_t child_id;
        int vecp;
@@ -768,8 +760,6 @@ sendfile(char **arg, char *file, int pushsw)
        case OK:
                vecp = 0;
                vec[vecp++] = invo_name;
-               if (pushsw)
-                       vec[vecp++] = "-push";
                if (arg)
                        while (*arg)
                                vec[vecp++] = *arg++;