Added Content-Description header with the filename of the attachment.
[mmh] / uip / send.c
index d87e211..e39ab80 100644 (file)
@@ -97,6 +97,7 @@ main(int argc, char **argv)
        int msgp = 0, nfiles = 0, distsw = 0, vecp = 1;
        int msgnum, status;
        int in, out;
+       int n;
        char *cp, *maildir = NULL;
        char buf[BUFSIZ], **ap, **argp, **arguments;
        char *msgs[MAXARGS], *vec[MAXARGS];
@@ -273,11 +274,40 @@ 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] = "spost";
-       closefds(3);
+       for (n=3; n<OPEN_MAX; n++) {
+               close(n);
+       }
 
        for (msgnum = 0; msgnum < nfiles; msgnum++) {
                switch (sendsbr(vec, vecp, files[msgnum], &st, 1)) {
@@ -600,9 +630,9 @@ make_mime_composition_file_entry(char *file_name)
                adios(NULL, "unable to access file `%s'", file_name);
        }
 
-       fprintf(composition_file, "#%s; name=\"%s\" <>{attachment}",
-               content_type,
-               (!(cp = strrchr(file_name, '/'))) ? file_name : cp + 1);
+       cp = (!(cp = strrchr(file_name, '/'))) ? file_name : cp + 1;
+       fprintf(composition_file, "#%s; name=\"%s\" <> [%s] {attachment}",
+                       content_type, cp, cp);
 
        fprintf(composition_file, " %s\n", file_name);