X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=send.c;h=269d98d0c25e5ed646a4c598bdb2a815ef6ad98c;hp=2c064299dd1838a623019fc8e3a3c29668264b64;hb=16534e98723674fa391e3fc29d2a07ce419c13dd;hpb=68d6b380767702ba11529357f36d178d0dc4cb1e diff --git a/send.c b/send.c index 2c06429..269d98d 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;