diff -urN ../exim-4.95.orig/src/expand.c ./src/expand.c --- ../exim-4.95.orig/src/expand.c 2022-10-18 22:35:53.844234000 +0300 +++ ./src/expand.c 2022-10-18 21:17:29.541066000 +0300 @@ -633,6 +633,7 @@ { "mime_content_type", vtype_stringptr, &mime_content_type }, { "mime_decoded_filename", vtype_stringptr, &mime_decoded_filename }, { "mime_filename", vtype_stringptr, &mime_filename }, + { "mime_filename_raw", vtype_stringptr, &mime_filename_raw }, { "mime_is_coverletter", vtype_int, &mime_is_coverletter }, { "mime_is_multipart", vtype_int, &mime_is_multipart }, { "mime_is_rfc822", vtype_int, &mime_is_rfc822 }, diff -urN ../exim-4.95.orig/src/globals.c ./src/globals.c --- ../exim-4.95.orig/src/globals.c 2022-10-18 22:35:54.325045000 +0300 +++ ./src/globals.c 2022-10-18 21:17:25.691928000 +0300 @@ -1196,6 +1196,7 @@ uschar *mime_content_type = NULL; uschar *mime_decoded_filename = NULL; uschar *mime_filename = NULL; +uschar *mime_filename_raw = NULL; int mime_is_multipart = 0; int mime_is_coverletter = 0; int mime_is_rfc822 = 0; diff -urN ../exim-4.95.orig/src/globals.h ./src/globals.h --- ../exim-4.95.orig/src/globals.h 2022-10-18 22:35:53.925975000 +0300 +++ ./src/globals.h 2022-10-18 21:17:22.971969000 +0300 @@ -754,6 +754,7 @@ extern uschar *mime_content_type; extern uschar *mime_decoded_filename; extern uschar *mime_filename; +extern uschar *mime_filename_raw; extern int mime_is_multipart; extern int mime_is_coverletter; extern int mime_is_rfc822; diff -urN ../exim-4.95.orig/src/mime.c ./src/mime.c --- ../exim-4.95.orig/src/mime.c 2022-10-18 22:50:46.157388000 +0300 +++ ./src/mime.c 2022-10-18 22:46:14.568253000 +0300 @@ -409,6 +409,7 @@ mime_charset = NULL; mime_decoded_filename = NULL; mime_filename = NULL; +mime_filename_raw = NULL; mime_content_description = NULL; mime_content_disposition = NULL; mime_content_id = NULL; @@ -592,11 +593,21 @@ { uschar * q; uschar * dummy_errstr; + BOOL param_is_filename = FALSE; + if ((strncmpic("name=", p, 5) == 0) || (strncmpic("filename=", p, 9) == 0)) + param_is_filename = TRUE; + /* grab the value and copy to its expansion variable */ p += mp->namelen; q = mime_param_val(&p); /* p now trailing ; or NUL */ + if (param_is_filename) + { + mime_filename_raw = string_copy(q); + DEBUG(D_acl) debug_printf_indent("MIME: mime_filename_raw: '%s'\n", mime_filename_raw); + } + *mp->value = q && *q ? rfc2047_decode(q, check_rfc2047_length, NULL, 32, NULL, &dummy_errstr) @@ -638,6 +649,8 @@ p = q; p++; } DEBUG(D_acl) debug_printf_indent("MIME: fname '%s'\n", mime_filename_rfc2231); + mime_filename_raw = string_copy_malloc(mime_filename_rfc2231); + DEBUG(D_acl) debug_printf_indent("MIME: mime_filename_raw: '%s'\n", mime_filename_raw); if (Ustrlen(mime_filename_rfc2231) > 0) { uschar * mime_filename_rfc2231_decoded;