X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=send.c;h=e40d3daf0edc0a2ed5707e6fc07106fe8cb4b403;hp=6ca6963eff094b0742076aee53e15589c322be50;hb=aac3f035c98d7800fde3eef7a43ded322e4862db;hpb=558b0bd9de90a9dc28f409d8f46679bf48c72ded diff --git a/send.c b/send.c index 6ca6963..e40d3da 100644 --- a/send.c +++ b/send.c @@ -19,7 +19,7 @@ #include "alias.h" #include "keymap.h" #include "copy.h" -#include +#include "crypt.h" #include "mutt_idna.h" #include "attach.h" @@ -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)) { @@ -423,30 +477,13 @@ void mutt_make_attribution (CONTEXT * ctx, HEADER * cur, FILE * out) } } -void mutt_make_post_indent (CONTEXT * ctx, HEADER * cur, FILE * out) -{ - char buffer[STRING]; - - if (PostIndentString) { - mutt_make_string (buffer, sizeof (buffer), PostIndentString, ctx, cur); - fputs (buffer, out); - fputc ('\n', out); - } -} - 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); - mutt_make_attribution (ctx, cur, out); if (!option (OPTHEADER)) @@ -457,9 +494,6 @@ static int include_reply (CONTEXT * ctx, HEADER * cur, FILE * out) } mutt_copy_message (out, ctx, cur, cmflags, chflags); - - mutt_make_post_indent (ctx, cur, out); - return 0; } @@ -851,15 +885,6 @@ static int generate_body (FILE * tempfp, /* stream for outgoing message * else if (i == -1) return -1; } - else if (flags & SENDKEY) { - BODY *btmp; - - if ((btmp = crypt_pgp_make_key_attachment (NULL)) == NULL) - return -1; - - btmp->next = msg->content; - msg->content = btmp; - } mutt_clear_error (); @@ -963,9 +988,9 @@ 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(MCore.username) + m_strlen(fqdn) + 2); @@ -1161,7 +1186,7 @@ int ci_send_message (int flags, /* send mode */ address_list_wipe(&msg->env->from); } - if (!(flags & (SENDKEY | SENDPOSTPONED | SENDRESEND))) { + if (!(flags & (SENDPOSTPONED | SENDRESEND))) { pbody = body_new(); pbody->next = msg->content; /* don't kill command-line attachments */ msg->content = pbody; @@ -1290,40 +1315,28 @@ int ci_send_message (int flags, /* send mode */ if (option (OPTHDRS)) process_user_header (msg->env); - - if (option (OPTSIGONTOP) && (!(flags & SENDKEY))) - 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))) - append_signature (tempfp); + append_signature (tempfp); /* * this wants to be done _after_ generate_body, so message-hooks * can take effect. */ - if (option (OPTCRYPTAUTOSIGN)) + if (mod_crypt.autosign) msg->security |= SIGN; - if (option (OPTCRYPTAUTOENCRYPT)) + if (mod_crypt.autoencrypt) msg->security |= ENCRYPT; - if (option (OPTCRYPTREPLYENCRYPT) && cur && (cur->security & ENCRYPT)) + if (mod_crypt.replyencrypt && cur && (cur->security & ENCRYPT)) msg->security |= ENCRYPT; - if (option (OPTCRYPTREPLYSIGN) && cur && (cur->security & SIGN)) + if (mod_crypt.replysign && cur && (cur->security & SIGN)) msg->security |= SIGN; - if (option (OPTCRYPTREPLYSIGNENCRYPTED) && cur - && (cur->security & ENCRYPT)) + if (mod_crypt.replysignencrypted && cur && (cur->security & ENCRYPT)) msg->security |= SIGN; - if (msg->security & (ENCRYPT | SIGN)) { - if (option (OPTPGPAUTOINLINE)) - msg->security |= INLINE; - if (option (OPTPGPREPLYINLINE) && cur && (cur->security & INLINE)) - msg->security |= INLINE; - } if (msg->security) { /* @@ -1336,10 +1349,9 @@ int ci_send_message (int flags, /* send mode */ * disable individual mechanisms at run-time? */ if (cur) { - if (option (OPTCRYPTAUTOPGP) && (cur->security & APPLICATION_PGP)) + if (mod_crypt.autopgp && (cur->security & APPLICATION_PGP)) msg->security |= APPLICATION_PGP; - else if (option (OPTCRYPTAUTOSMIME) - && (cur->security & APPLICATION_SMIME)) + else if (mod_crypt.autosmime && (cur->security & APPLICATION_SMIME)) msg->security |= APPLICATION_SMIME; } @@ -1348,11 +1360,11 @@ int ci_send_message (int flags, /* send mode */ * for the decision. */ if (!(msg->security & (APPLICATION_SMIME | APPLICATION_PGP))) { - if (option (OPTCRYPTAUTOSMIME) && option (OPTSMIMEISDEFAULT)) + if (mod_crypt.autosmime && mod_crypt.smime_is_default) msg->security |= APPLICATION_SMIME; - else if (option (OPTCRYPTAUTOPGP)) + else if (mod_crypt.autopgp) msg->security |= APPLICATION_PGP; - else if (option (OPTCRYPTAUTOSMIME)) + else if (mod_crypt.autosmime) msg->security |= APPLICATION_SMIME; } } @@ -1375,8 +1387,7 @@ int ci_send_message (int flags, /* send mode */ && !(flags & (SENDRESEND | SENDPOSTPONED))) msg->env->from->personal = m_strdup(Realname); - if (!(flags & SENDKEY)) - m_fclose(&tempfp); + m_fclose(&tempfp); if (!(flags & SENDBATCH)) { struct stat st; @@ -1394,11 +1405,11 @@ int ci_send_message (int flags, /* send mode */ * setting of $forward_edit because the user probably needs to add the * recipients. */ - if (!(flags & SENDKEY) && - ((flags & SENDFORWARD) == 0 || + if (((flags & SENDFORWARD) == 0 || (option (OPTEDITHDRS) && option (OPTAUTOEDIT)) || query_quadoption (OPT_FORWEDIT, - _("Edit forwarded message?")) == M_YES)) { + _("Edit forwarded message?")) == M_YES)) + { /* If the this isn't a text message, look for a mailcap edit command */ if (rfc1524_mailcap_isneeded(msg->content)) { if (!mutt_edit_attachment (msg->content)) @@ -1424,7 +1435,7 @@ int ci_send_message (int flags, /* send mode */ mutt_message_hook (NULL, msg, M_SEND2HOOK); } - if (!(flags & (SENDPOSTPONED | SENDFORWARD | SENDKEY | SENDRESEND))) { + if (!(flags & (SENDPOSTPONED | SENDFORWARD | SENDRESEND))) { if (stat (msg->content->filename, &st) == 0) { /* if the file was not modified, bail out now */ if (mtime == st.st_mtime && !msg->content->next &&