X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fsendsbr.c;h=6215219ec0c9a995d7135261aa13ffff2676eb44;hb=2c3d90ed127ab47e695350367ca3c34d4324bcc4;hp=877538bfb70d2cafd83c2c2630b4334b4db19804;hpb=38615191e71744b066425e0c44412b62dbe49cc2;p=mmh diff --git a/uip/sendsbr.c b/uip/sendsbr.c index 877538b..6215219 100644 --- a/uip/sendsbr.c +++ b/uip/sendsbr.c @@ -2,8 +2,6 @@ /* * sendsbr.c -- routines to help WhatNow/Send along * - * $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. @@ -18,16 +16,10 @@ #include #include -#ifdef TIME_WITH_SYS_TIME +#ifdef HAVE_SYS_TIME_H # include -# include -#else -# ifdef TM_IN_SYS_TIME -# include -# else -# include -# endif #endif +#include int debugsw = 0; /* global */ int forwsw = 1; @@ -60,7 +52,7 @@ char *getusername (void); /* * static prototypes */ -static void armed_done (int); +static void armed_done (int) NORETURN; static void alert (char *, int); static int tmp_fd (void); static void anno (int, struct stat *); @@ -125,8 +117,11 @@ sendsbr (char **vec, int vecp, char *drft, struct stat *st, int rename_drft, cha * rename the draft file. I'm not quite sure why. */ if (pushsw && unique) { - if (rename (drft, strncpy (file, m_scratch (drft, invo_name), sizeof(file))) - == NOTOK) + char *cp = m_mktemp2(drft, invo_name, NULL, NULL); + if (cp == NULL) { + adios ("sendsbr", "unable to create temporary file"); + } + if (rename (drft, strncpy(file, cp, sizeof(file))) == NOTOK) adios (file, "unable to rename %s to", drft); drft = file; } @@ -253,8 +248,12 @@ attach(char *attachment_header_field_name, char *draft_file_name, * Make names for the temporary files. */ - (void)strncpy(body_file_name, m_scratch("", m_maildir(invo_name)), sizeof (body_file_name)); - (void)strncpy(composition_file_name, m_scratch("", m_maildir(invo_name)), sizeof (composition_file_name)); + (void)strncpy(body_file_name, + m_mktemp(m_maildir(invo_name), NULL, NULL), + sizeof (body_file_name)); + (void)strncpy(composition_file_name, + m_mktemp(m_maildir(invo_name), NULL, NULL), + sizeof (composition_file_name)); if (has_body) body_file = fopen(body_file_name, "w"); @@ -495,9 +494,10 @@ make_mime_composition_file_entry(char *file_name, int attachformat) least. */ (void) fprintf (composition_file, "#%s <>", content_type); } else { - /* Suppress Content-Id, insert simple Content-Disposition. */ + /* Suppress Content-Id, insert simple Content-Disposition + and Content-Description with filename. */ (void) fprintf (composition_file, - "#%s; name=\"%s\" <>{attachment}", + "#%1$s; name=\"%2$s\" <> [%2$s]{attachment}", content_type, ((p = strrchr(file_name, '/')) == (char *)0) ? file_name : p + 1); } @@ -512,9 +512,9 @@ make_mime_composition_file_entry(char *file_name, int attachformat) (void) fprintf (composition_file, "#%s <>", content_type); } else { /* Suppress Content-Id, insert Content-Disposition with - modification date. */ + modification date and Content-Description wtih filename. */ (void) fprintf (composition_file, - "#%s; name=\"%s\" <>{attachment; modification-date=\"%s\"}", + "#%1$s; name=\"%2$s\" <>[%2$s]{attachment; modification-date=\"%3$s\"}", content_type, ((p = strrchr(file_name, '/')) == (char *)0) ? file_name : p + 1, dtime (&st.st_mtime, 0)); @@ -676,9 +676,11 @@ splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay) char tmpdrf[BUFSIZ]; FILE *out; - strncpy (tmpdrf, m_scratch (drft, invo_name), sizeof(tmpdrf)); - if ((out = fopen (tmpdrf, "w")) == NULL) - adios (tmpdrf, "unable to open for writing"); + char *cp = m_mktemp2(drft, invo_name, NULL, &out); + if (cp == NULL) { + adios (drft, "unable to create temporary file for"); + } + strncpy(tmpdrf, cp, sizeof(tmpdrf)); chmod (tmpdrf, 0600); /* @@ -919,16 +921,17 @@ static int tmp_fd (void) { int fd; - char tmpfil[BUFSIZ]; + char *tfile = NULL; + + tfile = m_mktemp2(NULL, invo_name, &fd, NULL); + if (tfile == NULL) return NOTOK; + fchmod(fd, 0600); - strncpy (tmpfil, m_tmpfil (invo_name), sizeof(tmpfil)); - if ((fd = open (tmpfil, O_RDWR | O_CREAT | O_TRUNC, 0600)) == NOTOK) - return NOTOK; if (debugsw) - advise (NULL, "temporary file %s selected", tmpfil); + advise (NULL, "temporary file %s selected", tfile); else - if (unlink (tmpfil) == NOTOK) - advise (tmpfil, "unable to remove"); + if (unlink (tfile) == NOTOK) + advise (tfile, "unable to remove"); return fd; } @@ -968,14 +971,14 @@ anno (int fd, struct stat *st) sigaddset (&set, SIGINT); sigaddset (&set, SIGQUIT); sigaddset (&set, SIGTERM); - SIGPROCMASK (SIG_BLOCK, &set, &oset); + sigprocmask (SIG_BLOCK, &set, &oset); annoaux (fd); if (child_id == OK) _exit (0); /* reset the signal mask */ - SIGPROCMASK (SIG_SETMASK, &oset, &set); + sigprocmask (SIG_SETMASK, &oset, &set); chdir (cwd); break;