alterMIME CHANGELOG: -------------------------------------------------------------------------- -Abbreviations Used: DEV = This update was released as a DEVELOPMENT release of alterMIME the change will be included in the next STABLE release as well. STA = This update was released as a STABLE release of alterMIME -------------------------------------------------------------------------- 05 May 2010: PLD-DEV: Changed the way the pretext system works, now it's the same as the disclaimer system of specifying files --pretext= --pretext-html=<html pretext file> --pretext-b64=<base64 pretext file> If you have BOTH pretext and disclaimer files specified then alterMIME will now insert both in the single run. PLEASE NOTE - due to the streaming requirements the PRETEXT HTML insertion routine -depends- on there being a BODY tag present else the insertion will not occur. 29 April 2010: PLD-DEV: Added --pretext which positions the disclaimers to the start of the MIME segments. Currently only works for; * plain text * no boundaries * HTML 12 Dec 2008: PLD-DEV: Fixed up occurances of strcpy, sprintf and strcat located in mime_alter.c 24 Nov 2008: PLD-DEV: MIME_headers:MIME_headers_get() Added initialization code for the crlf/lf counts to read from the ffget module. This allows us to handle situations where we have insufficient headers to make a good guess of the linebreak, because we simply read from the ffget structure what the previous one was (if any). Updated quoted-printable encoding module (qpe.[ch]). 16 Nov 2008: PLD-REL: 0.3.10 15 Nov 2008: PLD-DEV: Storing line delimeter in the alterMIME global struct. Saves having to redefine/locate/check it all the time. Added CR, CRLF and CRCR occurance counters in MIME_headers Fixed up problem with AM_adapt_linebreak which caused total stripping of delimeters 06 Nov 2008: PLD-DEV: Moved AM_globals structure to the mime_alter.h file so that we can prepare for 0.4.x series which will provide an API change forcing us to pass an AM_global struct into every AM_* function. This will allow for multiple instances of the alterMIME engine in a given process without clashing issues of various global vars. Should have done this years ago. PLD-DEV: Added an output filter AM_adapt_linebreak() to feed disclaimers through so that their linebreaks match the last break type detected with the FFGET() reading. 30 Oct 2008: PLD-REL: Cleaned up compile warnings (against Ubuntu's 8.10's gcc, including fread/fwrite return values and the PLD_strlower() signed parameter issues. 14 Oct 2008: PLD-DEV: qpe.c updated to handle broken Outlook issue. 07 Oct 2008: -PLD:DEV: Added altermime_status_flags global to allow for easy inspection of the result of a disclaimer or xheader insertion run. 15 Aug 2008: -PLD:DEV: Extended the search depth of the segment-3+ insertion of disclaimers allowing it to find potential HTML/Text disclaimer segments that may have been burried deeper in a non-forwarded email. Insertion search will terminate immediately if a RFC822 forwarded email header is located. 20 Jul 2007: -PLD:DEV: Added closing of open file handles in AM nullify. (this would cause files to be zeroed if one performed an operation after nullifying attachments). Fixed small memory leak from regex compilation in AM nullify. 13 Jul 2007: -PLD:REL: Release as 0.3.8 -PLD:DEV: Updated ffget module. Corrected some code where hard-coded buffer sizes were present rather than properly referenced sizes. 09 Jun 2007: -PLD:DEV: Temporary file removal if insertion is aborted due to signed email - Carlos Velasco -PLD:DEV: Added text/calendar detection to prevent mutating outlook calendars (and others) -PLD:DEV: Preparing for STABLE release 09 Mar 2007: -PLD:DEV: Fixed bug that can cause crashing on QP decoding where the charout size wasn't 1. Thanks to Yossi Gottlieb for suppling the patch. 07 Mar 2007: -PLD:DEV: Added text/calendar detection, this allows us to implicitly avoid adding disclaimers into these bodies by virtue of the fact that alterMIME won't detect it as a "plain or HTML" text body. 12 Feb 2007: -PLD:DEV: Patch applied for QP encoding problem of chars as hex. (Patch provided by Julian Schneider) 30 Jan 2007: -PLD:DEV: Fixed missing boundary situation after BASE64 encoded disclaimer insetion. Fixed non-MIME BASE64 disclaimer insertion routines (ie, for emails with only a single segment and no boundary). 28 Jan 2007: -PLD:DEV: Added BASE64 _encoded_ disclaimer option so that it's possible to insert a BASE64 pre encoded dislciamer file into BASE64 bodies ONLY (ie, it won't be applied to plain or QP encoded bodies). --disclaimer-b64= 23 Jan 2007: -PLD:DEV: Added BASE64 disclaimer insertion routines (NAB) Requires the use of --force-into-b64 to activate Currently only works for text/plain and text/html content-type segments. Using for other segment types may cause unpredictable results (as it is the results are not proven). 14 Jul 2006: -PLD:DEV: Rolled in new FFGET module with cleaner code. Implemented FFGET_ftell / FFGET_fseek in the FFGET routines to allow for better debugging and potential features in alterMIME 22 Jun 2006: -PLD:DEV: Fixed --help output to indicate that --remove=<filename regex> is the correct notion, as apposed to the non-existant "--remove-regex". Thanks to Alex Samorukov for pointing this out. 29 Mar 2006: -PLD:REL: Released as 0.3.7 27 Mar 2006: -PLD:DEV: Added SEGMENT 3 disclaimer insertion attempt to handle emails that have both text and HTML representations of the email message. 02 Mar 2006: -PLD:DEV: Applied patch from Tim Jackson which solves a BASE64 induced mail truncation if disclaimer insertion fails. 01 Mar 2006: -PLD:DEV: Added Quoted-printable encoding to disclaimers if required by the transfer-encoding header of the MIME segment. 14 Feb 2006: -PLD:DEV: Fixed disclaimer insertion issue in emails with both HTML and attachment. 27 Mar 2005: -PLD:REL: Release as 0.3.6 -PLD:DEV: -Added -O2 option to Makefile for optimised binary -Added --no-qmail-bounce parameter to alterMIME to allow people to disable the email body search for files/attachments during a remove/removeall operation. -Added filename searching for the name= header parameters for remove facility. -Added headers-longsearch (qmail bounce) type detection for remove facility. 24 Mar 2005: -PLD:DEV: -Fixed multipart[-insert] discrepency between help output and actual functionality. --multipart-insert is the now correct parameter. -PLD:DEV: -Fixed incorrect parsing of body data when a header could not be inserted on the first segment, causing alterMIME to start reading the body text as if it was header data. Thanks to Pieter Vanmeerbeek for pointing this out and providing a set of data that reliably produced the problem. -PLD:DEV: -Fixed help output to display 'suffix' rather than 'postfix' for header alteration feature. 04 Feb 2005: -PLD:DEV: -Changed header insertion line from using a hard coded \r\n to using the contents of the 'true blank' separator line. (see AM_insert_Xheader) 20 Nov 2004: -PLD:DEV: -Fixed mistake in AM_add_disclaimer_cleanup(), where it incorrectly tests the input file for stdin using strcmp() causing alterMIME to not rename the new file. 04 Nov 2004: -PLD:DEV: Changed \n to \r\n delimeter for the X-header insertion routine 19 Oct 2004 -PLD:DEV: Fixed up \r\n issues with UNIX created disclaimers showing up fine in UNIX but as a single line in Windows. This one was for Neil Wilson of ZA. -PLD:DEV: Added patch from Tim Bruylants to allow for forcing of disclaimers in HTML MIME segments even if the segment doesn't terminate with /body /html. The patch also permits the use of disclaimers from STDIN (to STDOUT). Many thanks Tim. Fixed misspelling of 'filname' in alterMIME help/usage 18 Sep 2004 -PLD:REL: Release 0.3.5 -PLD:DEV: Rewrite the AM_add_disclaimer() function, breaking it down into smaller functions in an attempt to make it readable. AM_add_disclaimer now calls; AM_load_disclaimers() - Load the disclaimers required to insert. AM_read_to_boundary() - read input file till a boundary is hit. AM_add_disclaimer_no_boudary() - Insert into a non-boundary email. AM_insert_disclaimer_into_segment() - Insert into a MIME segment 17 Sep 2004 -PLD:DEV: Added content type and content transfer encoding types to NOT insert disclaimers into. See the function AM_read_headers() where the switch hinfo.content_type and .content_transfer_encoding is listed. This prevents some potential infinite loops when alterMIME tried to read the data as headers, rather than as a MIME body. Added BS_set_hold_limit() to limit the number of boundaries held in the stack to a certain limit (in the case of alterMIME, 1). This is done so that alterMIME doesn't try to traverse into nested segments. 16 Sep 2004 -PLD:DEV: Changed boundary tests from strstr() to BS_cmp() Updated MIME_headers code to match the ripMIME engine Fixed bug where some infinite loops occured while trying to insert a HTML disclaimer 06 May 2004 -PLD:DEV: Stopped alterMIME from inserting a disclaimer in a B64 encoded main body. 10 Mar 2004 -PLD:REL: Release 0.3.4 09 Mar 2004 -PLD:DEV: Fixed up header clobbering where the fields were ISO encoded and duly un-encoded when filtered via alterMIME. Thanks to Viktoras Rynkevicius for persuing this one. 16 Jan 2003 -PLD:DEV: Added initializers for some hinfo fields to pacify valgrind -PLD:DEV: Added AM_done() function to clear any remaining disclaimer malloc'd data produced from the strdup() call inside of AM_set_disclaimer_*() 30 Nov 2003 -PLD:DEV: Implementing regex matching for attachment removal 14 Nov 2003 -PLD:REL: Released alterMIME 0.3.3 30 Oct 2003 26554 -PLD:DEV: Added x-header string filtering to prevent dubious strings getting through, such as ones containing \n\r sequences or 0 length strings. 21 Oct 2003 -PLD:DEV: Reimplementing S/MIME detection (development) 26 Jun 2003 -PLD:DEV: Applied patch from Ludwig Pummer to fix up stdin/out streaming for the --remove facility 11 Jun 2003 -PLD:DEV: Applied fix from Jorge Jimenez to resolve issues with HTML disclaimer insertion in certain situations. 14 May 2003 -PLD: Fixed attachment-replace path inclusion into the MIME-headers -PLD: Removed spurilous parameters off AM_add_disclaimer() call which caused some segfault behavior in other external applications which were using the alterMIME engine 04 May 2003 -PLD: Release as 0.3.1 28 April 2003 -PLD: replaced the attachment replacement code. Uses a very similar structure to the code as used by the nullification/remove system [ with some minor changes ]. There are still some outstanding issues, like how to cleanly deal with the 'main' headers of each MIME, mostly in regards to the fact that unlike the per-attachment headers, the main headers typically contain a lot of other email-related information. Overall the code works a lot better than the old one, despite the current limitations. Now, if an attachment is replaced, its old headers are also replaced. The new headers are just Content-Type, Content-Disposition and Content-Transfer-Encoding. There may be more headers added later depending on the needs encountered. Additionally, we can currently only add attachments in BASE64 encoding format, I will extend this in the future to support QuotedPrintable and plain-text. 27 April 2003 -PLD: Fixed header-alteration in Suffix mode problem where it would split a doubleCR or singleCR line incorrectly, because it was looking for a LF but didn't find one. -PLD: Changed the nullification logic slightly so that the first MIME segment can be 'nullified'. Rathern than being able to remove the actual headers which specify the file details, it's been currently chosen to clobber the filename in the headers by prefixing with either a _ or X character and then proceeding to nullify the contents -PLD: Nullification specification via --nullify= can be a regex expression. This means that you can now remove multiple files, ie --remove='\.exe$' --remove-all has been retained, despite the fact that the feature can be achived using --remove='.*' 26 April 2003 - Changed/replaced the AM_section1() call into AM_read_headers() in which I then call MIMEH_parse_headers(), which does a vastly superior job of detecting the /right/ headers. - Replaced the AM_nullify_attachment() with a far more compact version which does a far cleaner job of nullifying, removing the entire attachment and headers [ except for attachments which are the entire email body, in which case I have yet to still decide/workout how best to handle the situation ] 25 April 2003 - Releasing as 0.2.2, this will be the last [ feature ] release for the 0.2.2 series. After this I will rip out a lot of the code dealing with the header parsing and replace it with that which is now being used in ripMIME - The new series will be 0.3.x 21 March 2003 - Added generic header replacement tool: alterMIME now allows you to change headers [if they already exist] so that you can do things like change subject headers. A future extention will be to allow the modification of headers on all the MIME segments rather than just the main headers. To use: --alter-header="header-you-want-to-change" --alter-mode=prefix|suffix|replace --alter-with="text to use" --alter-mode= modes explanation: prefix: prefixes the text defined with --alter-with before the current existing text for the header suffix: suffixes the text defined with --alter-with after the current existing text for the header replace: replaces all the currently existing header text with the text provided by --alter-with 16 March 2003 - Released v0.2.1 23/02/2003 - Unified logging output routines ( all logging now goes via LOGGER ) - Added logging output mode option ( stdout / stderr / syslog ) - Added description of available options for alterMIME in verbose/help mode - Cleaned up altermime.c source code, placing all loose global vars into single passed struct 22/02/2003 - Replaced strlower, XAM_strtok and zstr with a single module 'pldstr'. - Added new modules filename-filter and libmimedecoders - Added --disclaimer-html option which allows you to have a seperate plaintext and HTML disclaimer - Added --multipart option to force alterMIME to insert disclaimers into the first level multipart block in an email, this means that you can effective insert disclaimers into forwarded emails. 12/11/2002 - Released as 0.1.14 - Corrected a FFGET module bug which caused terminating lines without a \n or \r to contain data from the previous line ( ie, there was no terminating \0 at the string ending, thus the previous data in the buffer simply filled up the rest of the buffer ) - Corrected the insertion of disclaimers in situations where a file attachment ends without a boundary line. - Corrected the insertion of disclaimers in situations where a single file is attached with no email bodies. 12/05/2002 - Released as 0.1.13 - Cleaned up disclaimer insertion routines so that disclaimers are not inserted into the incorrect MIME segment - Used ccmalloc to test the allocation of memory when running --xheader or --disclaimer , I'm pleased to say that both operations returned with no under or over use of memory :-) ccmalloc is a great program tool, I highly recommend it for when you're tracking down wierd bugs, often, just by cleaning up the memory spillages you fix you bugs. - ccmalloc is by Armin Biere. (biere at 26/04/2002 - Released as 0.1.12 - Corrected segfault issue with x-header insertion, would occur once every 1000 or so emails was caused by using snprintf() in alterMIME with one byte too high a buffer size value this in turn cased the FFGET_FILE variable to be overwritten with a \0 byte causing the program to crash on exit (which was rather interesting to watch). - Improved the disclaimer insertion routines. Hopefully now it'll correctly put in the right style of disclaimer (HTML or Plain) based on header information. 19/04/2002 - Corrected x-header insertion code, problem actually resided in the FFGET module which was returning NULL on FFGET_fgets() one call too early. 06/03/2002 - Replaced AM_build_table() with a static decoding table at compile time - Added FFGET library for file input and correct \n\r detections in headers - Updated AM_insert_Xheader() routine. 22/10/2001 - Release 0.1.10 - Moved strlower() call into mime_alter codebase and renamed it to AM_strlower. Also improved the speed of the strlower call by removing the testing for uppercase on each char. - Makefile: Added strip command to make install - mime_alter:AM_add_disclaimer: Added logic to deal with broken AOL emails [missing BODY tag] - Thanks to Sean Kelly for supplying the mailpack. 21/10/2001 - Released 0.1.9 - Corrected boundary quotation closure issue. 20/10/2001 - Release 0.1.8 - Changed location detection algorithm for disclaimer insertion, specifically to deal with emails which are [in effect] nested one level down despite being new emails. - No longer alters signed messages [for disclaimer addtion] without being forced via --altersigned option - Thanks to Raymond Bramwell for providing the assortment of mailpacks showing up these intersting issues 17/10/2001 - Improved HTML disclaimer addition, prevented spurilous line addtion in emails which had no additional attachments 15/10/2001 - Added ability to nullify all named attachments (feature Plead by Estaga) - Improved disclaimer insertion technique so as not to break files which didn't have </body> tag on a seperate line - Made disclaimer addition remove the temp file after completion 09/03/2001 - Reworked replacement file section, making it buffer the headers before writing out, this allows us to then change the headers to suit the new file name without requiring two passes of the file. - Got rid of the spurilous alterMIME decoding messages (why did I leave them there in the first place!!#@$!!! 03/08/2001 - Fixed up potential sig11 issues with files being read which didn't exist. 21/07/2001 - Fixed up disclaimer intertion routine if file did not contain a boundary specifier. 01/07/2001 - Added xheader insertion facility (from ripMIME) 17/06/2001 - Added attachment replace ability - Fixed up disclaimer ability to enable both HTML and plaintext portions to be updated 05/06/2001- - Fixed up Makefile - Released as alterMIME 0.1.3 07/05/2001 - - Rewrote "unable to add disclaimer" message to make more sence in mime_alter.c 05/05/2001 - - Added Makefile to package. 02/05/2001 - - Initial development and release. - Features available are: disclaimer-addition attachment-nullification (rendering attachment to 0 bytes) ---------------------------------------------