diff options
| author | Sam Varshavchik | 2018-09-26 08:21:37 -0400 |
|---|---|---|
| committer | Sam Varshavchik | 2018-09-26 08:21:37 -0400 |
| commit | a93bf23f84513a7fee6c648266de43dc0f01ad87 (patch) | |
| tree | ad12fe3b8adb1958a2bb6d12a2b979801bfce921 /imap/fetch.c | |
| parent | 9e7f4cb275f04c59dd187b4a39b00832d2b2817e (diff) | |
| download | courier-libs-a93bf23f84513a7fee6c648266de43dc0f01ad87.tar.bz2 | |
Substitute message for non-UTF-8 IMAP clients.
Diffstat (limited to 'imap/fetch.c')
| -rw-r--r-- | imap/fetch.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/imap/fetch.c b/imap/fetch.c index fd25265..c3998d9 100644 --- a/imap/fetch.c +++ b/imap/fetch.c @@ -1,5 +1,5 @@ /* -** Copyright 1998 - 2010 Double Precision, Inc. +** Copyright 1998 - 2018 Double Precision, Inc. ** See COPYING for distribution information. */ @@ -450,7 +450,41 @@ static int fetchitem(FILE **fp, int *open_err, struct fetchinfo *fi, if (mimecorrectness && !enabled_utf8 && ((*mimep)->rfcviolation & RFC2045_ERR8BITHEADER)) + { +#if HAVE_OPEN_MEMSTREAM + char *ptr; + size_t sizeloc; + FILE *memfp; + + static const char canned_msg[]= + "From: Mail Delivery Subsystem <postmaster@localhost>\n" + "Subject: Message unavailable\n" + "\n" + "This is a Unicode message that cannot be correctly\n" + "opened by your E-mail program. Please upgrade to\n" + "an E-mail program that supports IMAP with UTF-8.\n"; + + if ((memfp=open_memstream(&ptr, &sizeloc)) != 0) + { + struct rfc2045 *rfcp; + + fprintf(memfp, canned_msg); + + if ((rfcp=rfc2045_alloc()) != NULL) + { + rfc2045_parse(rfcp, canned_msg, + sizeof(canned_msg)-1); + (*fetchfunc)(memfp, fi, i, msgnum, rfcp); + rfc2045_free(rfcp); + } + fclose(memfp); + free(ptr); + } + + /* Still return -1, in order to [ALERT] the client */ +#endif return -1; + } (*fetchfunc)(*fp, fi, i, msgnum, *mimep); return (rc); |
