X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=send.c;h=f786e5c137e0938eebe726af65e407c7b268c696;hp=acb01af4bacd9596fb0c0974386612554ff466c8;hb=6d2a5b1e45ea9606d27a23c068bd4e8e5f94f341;hpb=59f5843ea1ff2f68a60ceaeb497cf195bb512238 diff --git a/send.c b/send.c index acb01af..f786e5c 100644 --- a/send.c +++ b/send.c @@ -29,6 +29,65 @@ #include "remailer.h" +int url_parse_mailto(ENVELOPE *e, char **body, const char *src) +{ + char *t; + char *tmp; + char *headers; + char *tag, *value; + char scratch[HUGE_STRING]; + + int taglen; + + string_list_t **last = &e->userhdrs; + + if (!(t = strchr (src, ':'))) + return -1; + + if ((tmp = m_strdup(t + 1)) == NULL) + return -1; + + if ((headers = strchr (tmp, '?'))) + *headers++ = '\0'; + + url_decode(tmp); + e->to = rfc822_parse_adrlist(e->to, tmp); + + tag = headers ? strtok (headers, "&") : NULL; + + for (; tag; tag = strtok(NULL, "&")) { + if ((value = strchr (tag, '='))) + *value++ = '\0'; + if (!value || !*value) + continue; + + url_decode (tag); + url_decode (value); + + if (mime_which_token(tag, -1) == MIME_BODY) { + if (body) + m_strreplace(body, value); + } else { +#define SAFEPFX (option(OPTSTRICTMAILTO) ? "" : "X-Mailto-") + taglen = m_strlen(tag) + strlen(SAFEPFX); + /* mutt_parse_rfc822_line makes some assumptions */ + snprintf(scratch, sizeof(scratch), "%s%s: %s", SAFEPFX, tag, value); +#undef SAVEPFX + scratch[taglen] = '\0'; + value = vskipspaces(&scratch[taglen + 1]); + last = mutt_parse_rfc822_line (e, NULL, scratch, value, 0, 0, last); + /* if $strict_mailto is set, force editing headers to let + * users have a look at what we got */ + if (!option (OPTSTRICTMAILTO)) { + set_option (OPTXMAILTO); + set_option (OPTEDITHDRS); + } + } + } + + p_delete(&tmp); + return 0; +} static void append_signature (FILE * f) { FILE *tmpfp; @@ -38,7 +97,7 @@ static void append_signature (FILE * f) fprintf (f, "\n%s", SignOffString); } - if (Signature && (tmpfp = mutt_open_read (Signature, &thepid))) { + if (tmpfp = mutt_open_read(NONULL(MAlias.signature), &thepid)) { if (option (OPTSIGDASHES)) fputs ("\n-- \n", f); else if (SignOffString) @@ -390,11 +449,6 @@ static int include_forward (CONTEXT * ctx, HEADER * cur, FILE * out) mutt_parse_mime_message (ctx, cur); mutt_message_hook (ctx, cur, M_MESSAGEHOOK); - if ((cur->security & ENCRYPT) && option (OPTFORWDECODE)) { - /* make sure we have the user's passphrase before proceeding... */ - crypt_valid_passphrase (cur->security); - } - mutt_forward_intro (out, cur); if (option (OPTFORWDECODE)) { @@ -439,11 +493,6 @@ static int include_reply (CONTEXT * ctx, HEADER * cur, FILE * out) int cmflags = M_CM_PREFIX | M_CM_DECODE | M_CM_CHARCONV | M_CM_REPLYING; int chflags = CH_DECODE; - if ((cur->security & ENCRYPT)) { - /* make sure we have the user's passphrase before proceeding... */ - crypt_valid_passphrase (cur->security); - } - mutt_parse_mime_message (ctx, cur); mutt_message_hook (ctx, cur, M_MESSAGEHOOK); @@ -963,16 +1012,16 @@ address_t *mutt_default_from (void) * Is this the right thing to do? */ - if (From) - adr = address_dup(From); - else if (option (OPTUSEDOMAIN)) { + if (MAlias.from) + adr = address_dup(MAlias.from); + else if (MCore.use_domain) { const char *fqdn = mutt_fqdn (1); adr = address_new(); - adr->mailbox = p_new(char, m_strlen(Username) + m_strlen(fqdn) + 2); - sprintf(adr->mailbox, "%s@%s", NONULL(Username), NONULL(fqdn)); + adr->mailbox = p_new(char, m_strlen(MCore.username) + m_strlen(fqdn) + 2); + sprintf(adr->mailbox, "%s@%s", NONULL(MCore.username), NONULL(fqdn)); } else { adr = address_new (); - adr->mailbox = m_strdup(NONULL(Username)); + adr->mailbox = m_strdup(NONULL(MCore.username)); } return (adr); @@ -985,7 +1034,7 @@ static int send_message (HEADER * msg) int i; /* Write out the message in MIME form. */ - tempfp = m_tempfile(tempfile, sizeof(tempfile), NONULL(Tempdir), NULL); + tempfp = m_tempfile(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL); if (!tempfp) return -1; @@ -1183,7 +1232,7 @@ int ci_send_message (int flags, /* send mode */ if (!tempfile) { char buffer[_POSIX_PATH_MAX]; - tempfp = m_tempfile(buffer, sizeof(buffer), NONULL(Tempdir), NULL); + tempfp = m_tempfile(buffer, sizeof(buffer), NONULL(MCore.tmpdir), NULL); msg->content->filename = m_strdup(buffer); } else { tempfp = safe_fopen(tempfile, "a+"); @@ -1290,16 +1339,12 @@ int ci_send_message (int flags, /* send mode */ if (option (OPTHDRS)) process_user_header (msg->env); - - if (option (OPTSIGONTOP) && (!(flags & SENDKEY) && Editor)) - append_signature (tempfp); - /* include replies/forwarded messages, unless we are given a template */ if (!tempfile && (ctx || !(flags & (SENDREPLY | SENDFORWARD))) && generate_body (tempfp, msg, flags, ctx, cur) == -1) goto cleanup; - if (!option (OPTSIGONTOP) && (!(flags & SENDKEY) && Editor)) + if (!(flags & SENDKEY)) append_signature (tempfp); /* @@ -1405,12 +1450,11 @@ int ci_send_message (int flags, /* send mode */ goto cleanup; } else if (option (OPTEDITHDRS)) { mutt_env_to_local (msg->env); - mutt_edit_headers (Editor, msg->content->filename, msg, fcc, - sizeof (fcc)); + mutt_edit_headers(msg->content->filename, msg, fcc, sizeof (fcc)); mutt_env_to_idna (msg->env, NULL, NULL); } else { - mutt_edit_file (Editor, msg->content->filename); + mutt_edit_file(msg->content->filename); if (stat (msg->content->filename, &st) == 0) { if (mtime != st.st_mtime)