X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=sendlib.c;h=1e8ffe7f6f55a57af92bae0592bf473d9bd9a335;hp=629e1972308203f10333e4b7f39549873063469d;hb=f7f52358a72c7bc02e201dd03bd7f75869681a52;hpb=a8477ebaa09990b3688164cbe5cf661c4189541d diff --git a/sendlib.c b/sendlib.c index 629e197..1e8ffe7 100644 --- a/sendlib.c +++ b/sendlib.c @@ -14,6 +14,9 @@ #endif #include "mutt.h" +#include "ascii.h" +#include "handler.h" +#include "recvattach.h" #include "mutt_curses.h" #include "rfc2047.h" #include "rfc2231.h" @@ -315,7 +318,7 @@ int mutt_write_mime_header (BODY * a, FILE * f) && !strcmp (buffer, tmp)) snprintf (buffer, sizeof (buffer), "\"%s\"", tmp); - FREE (&tmp); + mem_free (&tmp); tmplen = str_len (buffer) + str_len (p->attribute) + 1; @@ -357,7 +360,7 @@ int mutt_write_mime_header (BODY * a, FILE * f) tmp = str_dup (t); encode = rfc2231_encode_string (&tmp); rfc822_cat (buffer, sizeof (buffer), tmp, MimeSpecials); - FREE (&tmp); + mem_free (&tmp); fprintf (f, "; filename%s=%s", encode ? "*" : "", buffer); } } @@ -613,10 +616,10 @@ static size_t convert_file_to (FILE * file, const char *fromcode, if (cd1 == (iconv_t) (-1)) return -1; - cd = safe_calloc (ncodes, sizeof (iconv_t)); - score = safe_calloc (ncodes, sizeof (size_t)); - states = safe_calloc (ncodes, sizeof (CONTENT_STATE)); - infos = safe_calloc (ncodes, sizeof (CONTENT)); + cd = mem_calloc (ncodes, sizeof (iconv_t)); + score = mem_calloc (ncodes, sizeof (size_t)); + states = mem_calloc (ncodes, sizeof (CONTENT_STATE)); + infos = mem_calloc (ncodes, sizeof (CONTENT)); for (i = 0; i < ncodes; i++) if (ascii_strcasecmp (tocodes[i], "UTF-8")) @@ -706,10 +709,10 @@ static size_t convert_file_to (FILE * file, const char *fromcode, iconv_close (cd[i]); iconv_close (cd1); - FREE (&cd); - FREE (&infos); - FREE (&score); - FREE (&states); + mem_free (&cd); + mem_free (&infos); + mem_free (&score); + mem_free (&states); return ret; #else @@ -748,7 +751,7 @@ static size_t convert_file_from_to (FILE * file, } /* Copy them */ - tcode = safe_malloc (ncodes * sizeof (char *)); + tcode = mem_malloc (ncodes * sizeof (char *)); for (c = tocodes, i = 0; c; c = c1 ? c1 + 1 : 0, i++) { if ((c1 = strchr (c, ':')) == c) continue; @@ -771,7 +774,7 @@ static size_t convert_file_from_to (FILE * file, tcode[cn] = 0; break; } - FREE (&fcode); + mem_free (&fcode); } } else { @@ -786,9 +789,9 @@ static size_t convert_file_from_to (FILE * file, /* Free memory */ for (i = 0; i < ncodes; i++) - FREE (&tcode[i]); + mem_free (&tcode[i]); - FREE (tcode); + mem_free (tcode); return ret; } @@ -802,7 +805,7 @@ CONTENT *mutt_get_content_info (const char *fname, BODY * b) CONTENT *info; CONTENT_STATE state; FILE *fp = NULL; - char *fromcode; + char *fromcode = NULL; char *tocode; char buffer[100]; char chsbuf[STRING]; @@ -828,7 +831,7 @@ CONTENT *mutt_get_content_info (const char *fname, BODY * b) return (NULL); } - info = safe_calloc (1, sizeof (CONTENT)); + info = mem_calloc (1, sizeof (CONTENT)); memset (&state, 0, sizeof (state)); if (b != NULL && b->type == TYPETEXT && (!b->noconv && !b->force_charset)) { @@ -843,7 +846,7 @@ CONTENT *mutt_get_content_info (const char *fname, BODY * b) mutt_set_parameter ("charset", chsbuf, &b->parameter); } b->file_charset = fromcode; - FREE (&tocode); + mem_free (&tocode); safe_fclose (&fp); return info; } @@ -1015,7 +1018,7 @@ void mutt_message_to_7bit (BODY * a, FILE * fp) mutt_write_mime_body (a->parts, fpout); cleanup: - FREE (&line); + mem_free (&line); if (fpin && !fp) fclose (fpin); @@ -1179,7 +1182,7 @@ void mutt_update_encoding (BODY * a) mutt_set_encoding (a, info); mutt_stamp_attachment (a); - FREE (&a->content); + mem_free (&a->content); a->content = info; } @@ -1433,7 +1436,7 @@ void mutt_write_references (LIST * r, FILE * f) for (; (TrimRef == 0 || refcnt < TrimRef) && r; r = r->next) { if (refcnt == refmax) - safe_realloc (&ref, (refmax += REF_INC) * sizeof (LIST *)); + mem_realloc (&ref, (refmax += REF_INC) * sizeof (LIST *)); ref[refcnt++] = r; } @@ -1442,7 +1445,7 @@ void mutt_write_references (LIST * r, FILE * f) fputs (ref[refcnt]->data, f); } - FREE (&ref); + mem_free (&ref); } /* Note: all RFC2047 encoding should be done outside of this routine, except @@ -1468,6 +1471,7 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, char *p; LIST *tmp = env->userhdrs; int has_agent = 0; /* user defined user-agent header field exists */ + list2_t* hdrs = list_from_str (EditorHeaders, " "); #ifdef USE_NNTP if (!option (OPTNEWSSEND)) @@ -1475,6 +1479,8 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, if (mode == 0 && !privacy) fputs (mutt_make_date (buffer, sizeof (buffer)), fp); +#define EDIT_HEADER(x) (mode != 1 || option(OPTXMAILTO) || (mode == 1 && list_lookup(hdrs,(list_lookup_t*) ascii_strcasecmp,x) >= 0)) + /* OPTUSEFROM is not consulted here so that we can still write a From: * field if the user sets it with the `my_hdr' command */ @@ -1492,7 +1498,8 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, #ifdef USE_NNTP if (!option (OPTNEWSSEND)) #endif - fputs ("To: \n", fp); + if (EDIT_HEADER("To:")) + fputs ("To: \n", fp); if (env->cc) { fputs ("Cc: ", fp); @@ -1502,7 +1509,8 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, #ifdef USE_NNTP if (!option (OPTNEWSSEND)) #endif - fputs ("Cc: \n", fp); + if (EDIT_HEADER("Cc:")) + fputs ("Cc: \n", fp); if (env->bcc) { if (mode != 0 || option (OPTWRITEBCC)) { @@ -1514,28 +1522,30 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, #ifdef USE_NNTP if (!option (OPTNEWSSEND)) #endif - fputs ("Bcc: \n", fp); + if (EDIT_HEADER("Bcc:")) + fputs ("Bcc: \n", fp); #ifdef USE_NNTP if (env->newsgroups) fprintf (fp, "Newsgroups: %s\n", env->newsgroups); - else if (mode == 1 && option (OPTNEWSSEND)) + else if (mode == 1 && option (OPTNEWSSEND) && EDIT_HEADER("Newsgroups:")) fputs ("Newsgroups: \n", fp); if (env->followup_to) fprintf (fp, "Followup-To: %s\n", env->followup_to); - else if (mode == 1 && option (OPTNEWSSEND)) + else if (mode == 1 && option (OPTNEWSSEND) && EDIT_HEADER("Followup-To:")) fputs ("Followup-To: \n", fp); if (env->x_comment_to) fprintf (fp, "X-Comment-To: %s\n", env->x_comment_to); - else if (mode == 1 && option (OPTNEWSSEND) && option (OPTXCOMMENTTO)) + else if (mode == 1 && option (OPTNEWSSEND) && option (OPTXCOMMENTTO) && + EDIT_HEADER("X-Comment-To:")) fputs ("X-Comment-To: \n", fp); #endif if (env->subject) fprintf (fp, "Subject: %s\n", env->subject); - else if (mode == 1) + else if (mode == 1 && EDIT_HEADER("Subject:")) fputs ("Subject: \n", fp); /* save message id if the user has set it */ @@ -1546,7 +1556,7 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, fputs ("Reply-To: ", fp); mutt_write_address_list (env->reply_to, fp, 10, 0); } - else if (mode > 0) + else if (mode > 0 && EDIT_HEADER("Reply-To:")) fputs ("Reply-To: \n", fp); if (env->mail_followup_to) @@ -1576,6 +1586,8 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, fputc ('\n', fp); } +#undef EDIT_HEADER + /* Add any user defined headers */ for (; tmp; tmp = tmp->next) { if ((p = strchr (tmp->data, ':'))) { @@ -1612,9 +1624,11 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, } } /* Add a vanity header */ - fprintf (fp, "User-Agent: mutt-ng/%s (%s)\n", MUTT_VERSION, os); + fprintf (fp, "User-Agent: %s (%s)\n", mutt_make_version (0), os); } + list_del (&hdrs, (list_del_t*) _mem_free); + return (ferror (fp) == 0 ? 0 : -1); } @@ -1637,12 +1651,12 @@ static void encode_headers (LIST * h) continue; rfc2047_encode_string (&tmp); - safe_realloc (&h->data, + mem_realloc (&h->data, str_len (h->data) + 2 + str_len (tmp) + 1); sprintf (h->data + i, ": %s", NONULL (tmp)); /* __SPRINTF_CHECKED__ */ - FREE (&tmp); + mem_free (&tmp); } } @@ -1869,7 +1883,7 @@ send_msg (const char *path, char **args, const char *msg, char **tempfile) } else if (pid == -1) { unlink (msg); - FREE (tempfile); + mem_free (tempfile); _exit (S_ERR); } @@ -1897,14 +1911,14 @@ send_msg (const char *path, char **args, const char *msg, char **tempfile) st = WIFEXITED (st) ? WEXITSTATUS (st) : S_ERR; if (SendmailWait && st == (0xff & EX_OK)) { unlink (*tempfile); /* no longer needed */ - FREE (tempfile); + mem_free (tempfile); } } else { st = (SendmailWait > 0 && errno == EINTR && SigAlrm) ? S_BKG : S_ERR; if (SendmailWait > 0) { unlink (*tempfile); - FREE (tempfile); + mem_free (tempfile); } } @@ -1915,7 +1929,7 @@ send_msg (const char *path, char **args, const char *msg, char **tempfile) if (kill (ppid, 0) == -1 && errno == ESRCH) { /* the parent is already dead */ unlink (*tempfile); - FREE (tempfile); + mem_free (tempfile); } _exit (st); @@ -1940,7 +1954,7 @@ static char **add_args (char **args, size_t * argslen, size_t * argsmax, /* weed out group mailboxes, since those are for display only */ if (addr->mailbox && !addr->group) { if (*argslen == *argsmax) - safe_realloc (&args, (*argsmax += 5) * sizeof (char *)); + mem_realloc (&args, (*argsmax += 5) * sizeof (char *)); args[(*argslen)++] = addr->mailbox; } } @@ -1951,7 +1965,7 @@ static char **add_option (char **args, size_t * argslen, size_t * argsmax, char *s) { if (*argslen == *argsmax) - safe_realloc (&args, (*argsmax += 5) * sizeof (char *)); + mem_realloc (&args, (*argsmax += 5) * sizeof (char *)); args[(*argslen)++] = s; return (args); } @@ -1988,7 +2002,7 @@ static int mutt_invoke_sendmail (ADDRESS * from, /* the sender */ i = 0; while ((ps = strtok (ps, " "))) { if (argslen == argsmax) - safe_realloc (&args, sizeof (char *) * (argsmax += 5)); + mem_realloc (&args, sizeof (char *) * (argsmax += 5)); if (i) args[argslen++] = ps; @@ -2032,7 +2046,7 @@ static int mutt_invoke_sendmail (ADDRESS * from, /* the sender */ #endif if (argslen == argsmax) - safe_realloc (&args, sizeof (char *) * (++argsmax)); + mem_realloc (&args, sizeof (char *) * (++argsmax)); args[argslen++] = NULL; @@ -2055,10 +2069,10 @@ static int mutt_invoke_sendmail (ADDRESS * from, /* the sender */ else unlink (childout); - FREE (&childout); - FREE (&path); - FREE (&s); - FREE (&args); + mem_free (&childout); + mem_free (&path); + mem_free (&s); + mem_free (&args); if (i == (EX_OK & 0xff)) i = 0; @@ -2075,8 +2089,11 @@ int mutt_invoke_mta (ADDRESS * from, /* the sender */ int eightbit) { /* message contains 8bit chars */ #ifdef USE_LIBESMTP - if (SmtpHost) - return mutt_invoke_libesmtp (from, to, cc, bcc, msg, eightbit); +#ifdef USE_NNTP + if (!option (OPTNEWSSEND)) +#endif + if (SmtpHost) + return mutt_libesmtp_invoke (from, to, cc, bcc, msg, eightbit); #endif return mutt_invoke_sendmail (from, to, cc, bcc, msg, eightbit); @@ -2088,7 +2105,7 @@ char *mutt_append_string (char *a, const char *b) { size_t la = str_len (a); - safe_realloc (&a, la + str_len (b) + 1); + mem_realloc (&a, la + str_len (b) + 1); strcpy (a + la, b); /* __STRCPY_CHECKED__ */ return (a); } @@ -2117,13 +2134,13 @@ char *mutt_quote_string (const char *s) size_t rlen; rlen = str_len (s) + 3; - pr = r = (char *) safe_malloc (rlen); + pr = r = (char *) mem_malloc (rlen); *pr++ = '"'; while (*s) { if (INVALID_CHAR (*s)) { size_t o = pr - r; - safe_realloc (&r, ++rlen); + mem_realloc (&r, ++rlen); pr = r + o; *pr++ = '\\'; }