	$Id: CHANGES,v 0.95.2.2 2005/10/06 10:24:22 shelton Exp $

06.10.05     This day I have finished one great job - I have separated parseconfig
CityCat      function and can strip it into a library! So, a long long time feature
	     with parsing configuration file now exist! This day function
	     parseconfig() takes a source path and pointer to configuration file
	     decsription structure config_ent[]. Also some small fixes.

04.10.2005   *** Version 0.95.7 was released ***
CityCat
	     Mostly valuable changes - implemented one great feature - 'shadow copy'
	     With this feature, filter can silently shadow (copy) mail from some
	     user to specified path and keep it for future investigation. This
             feature implemented by 'shadow' attribute for user. Also pathways
             were changed - now /var/spool/maildrop/isolated is a default value
             in config file for IsolationPath and /var/spool/maildrop/extrasave
             is a default value for ExtraSavePath. Also some configuration parameters
             take DEFAULT values, WOW! Since 1997 I hasn't need to imlement these.

29.08.2005   To more difficult to 'leak' attaches through filter - now sender and
CityCat	     all receivers MUST marked 'attach' to take rights to deliver mail with
	     attachments, when enterprise shield is active. Server flag 'attach'
             was added to server propeties, and now to receive attaches sender
             and receiver MUST be explict specified, but to send attachmetns only
             sender must be specified

26.08.2005   *** Version 0.95.5 was released ***
CityCat
             Valuable changes: enterprise violations now acitivated! First violation
             which was detected - ability to send/receive ANY attachments. It will
             used mostly against spam, but also decline mail with "ordinary" attaches
             Also F*cked error (eom) [50] was tampered - now when it occured, mail
             will delivered anyway, but saved to future investigation. Also modes
             were changed - now is 'discard', 'reject' and 'isolate' for spam and
             enterprise. 'isolate' now mean 'reject and keep mail'. Also code was
             slightly shrinked. because options will processed by _checklist new
             function. Also some missed typical string functions were added to
             libconf.

19.08.2005   Fixed one ugly bug with (eom) [50] error reading saved message body
CityCat      That was error in boundary processing - spaces in boundary is real

09.03.2005   I have again forgotten to do a full test without debugging set, and
CityCat      again was trapped with error,

04.03.2005   Small error - in utility.c I have forgotten delete #ifdef DBPRINT
CityCat	     one place. Another error - new version has an old bug - cannot parse
	     header like "charset=blabla;format-flowed"

03.03.2005   *** Version 0.95.1 was released ***
CityCat
	     Valuable changes: Algoritm with checking message body was completely
             rewritten. Now file separated to 2 pieces - message header and message
             body. Body will keep separately from header and checks, only when
             a full body will received. mlfi_body() now only stores body chunks to
             media, mlfi_eom() now is main analyzer for chcking message body. Also
             was added one new spam sample - with ';' in boundary

01.03.2005   Unsafe behavior in strnstr() and my own strncasestr() leads to SIGSEGV
CityCat	     when tried to find substring up to last byte of memory segment. I have
	     designed my own __strnstr() (slightly changed strnstr()) and change
	     strncasestr() to be safe.

22.02.2005   Bugs in configure.in were corrected - incorrect set path' leads to
CityCat	     inavailability to make filter with prefix, different with /usr/local
	     and inavailability to specify additional include and libs directories
	     (even parameters were :-< )

18.02.2005   Two very seriously errors were detected - filter crash when ';' char
CityCat	     used in boundary, underflow counters of separator parts, which leads
             to trying to allocate negative-sized memory block and error in config
             files parser, which leads to leave "\n\n" sequences in result strings,
             which leads to dismiss records in scchosts array, when it contain only
             one record.

	     *** Version 0.94.9 was released. ***

27.05.2004   We now assumed rcNG and redesigned start script, according by rcNG rules
CityCat

21.05.2004   Hello, hello, Mr. Monkey! We again here, again together and again f**king
CityCat	     From my old implementation I have collected a pile of coredumps with at
	     least two bugs, one was eliminated now - when boundary in missed, but
             mail is multipart, I store "--" as boundary, but memory for it wasn't
             allocated. So, we releasing version 0.94.8.

23.10.2003   Found and eliminated a small bug - when installing, scchosts(5) installed
CityCat      as sccusers(5) and vice versa.

22.10.2003   Version 0.94.7 released.
CityCat

21.10.2003   Have tried to setup filter on server. Immediately encountered a bug - when
CityCat	     in config file isolation mode is full, but in commandline less than full
	     (i.e. incoming), active mode goes from config file and commandline mode
             ignored! This leads to seriously modification in startup code, cleaning
             about many global variables, because we now first processing config file,
             and than - commandline (previous order is a heavy heritage from my previous
	     closed-sources projects, where I should process configuration files from
             different locations). Now we can short startup code, clean many (about 7)
             global pointers and short int's

20.10.2003   A couple of minor bugs - in mlfi_eoh printed debug message, when debug
CityCat      is zero and in periodic srripts checking and displaying spam statistic
	     didn't work correctly, junking mail with full mallog.

09.10.2003   Minor bug in scripts to get list of spammed mail - to exclude false positive
CityCat	     with detail log, instead "SPAM" will using "[SPAM]". Correct one minor bug -
	     without debug info compilation will break in mlficatch.c.

08.10.2003   A small feature expansion - now we maintain all mail and spam mail separa-
CityCat	     tely to delete. --nodelete prevents deleting ANY mail from spam isolator,
	     --spam-no-delete prevents deletion only mail, classified as spam. A usual,
             when debug > 100, mail will saved unconditionally. Also, correct one bug
             with it - when mail goes through by "conforming" mode, it is not a spam
             (spam flag was incorrectly set). Also corrected one bug, issued when
             line with "Subject" goes after line with "Content-Type" and contains charset
             represenration (=?koi8-r?). This issue for charset length using length,
             which was calculated, when charset from "Content-Type" was processed.
             Because that occassion allocated memory for whole line ("charset=koi8-r"),
             extra false chars will goes in comparing. Also corrected bug with improper
             field length calculation in parse_content() function ("item=" text deleting
             from field, but their length was kept)

26.09.2003   At least, we fixing this bug with "glued" codepage! It was issued with
CityCat	     only special circumstances - when Subject contains national characters
	     (=?koi8-r?...), and receiver address was relatively short
	     (i.e. bubx@chat.ru). So, I'm awaiting for new bugs...

24.09.2003   Eliminated one bug, which leads to false non-comparable charsets in mail
CityCat	     when mail contain charset= in header and charset= in boundary and charset
	     value in boundary (and last using) is shorter, than charset in header,
             charset field in data structure didn't clean full and charset value "glued"
             from real charset and previous charset tail. Also fixed false positive,
             when charset in boundary doesn't allowed for sender/receiver. Also added
             some more spam samples in distribution (now are 8 sample files, I testing
             with all these)...This day also: O, God, this f*cking error surfaced again!
             (parsing error when "charset=us-ascii; format=flowed" in mail). Now this bug
             was eliminated through moslty expanding parse_content() function (step by
             step it came to big and serious function :-)) and rewriting their code (and
             again adding debug messages)

18.09.2003   Vacation, etc...And all this time buggy filter lied on ground (and time
CityCat	     to time up by cron :-)). So, now we again in work. Bug with memory over
             writing in charset= and boundary= processing was fixed. Noted two TODO's
              - we now don't process messages with nested boundary and don't process
             second parameter in Content-Type line in header, when boundary= was
             detcted. So, we'll work and work and work with this project...

28.08.2003   Sure, again? (C) Aqua :-))	Boundary keeping space was increased to 100
CityCat	     because today I have received mail with BIG boundary, and filter goes to
	     crash...

26.08.2003   Continued yesterday's debug and fight with bugs (ehtereal fight :-) ). Now
CityCat	     I encountered and declined two bugs - incorrect search 'html' in Content-
	     -Type, when HTML messages detecting and bug in strncasestr() function -
	     when match starting from first char, pointer didn't shifted to check all
	     phrase. Also source file mlficatch.c was reformatted - more accurately
	     function heading with description of call conditions and return values.
             Also added some more debug prints (What, again?). This day still didn't
             processed 'nested boundaries' (ignored all boundaries. except first).
             Also some more explain FAQ file. Manual pages were corrected, accorded
             to modern configuration file, checked against various grammar bugs. In
             README was added section with links to used RFC's.

25.08.2003   Spent some days to debug one dumb, dumb error with memory overwriting :-(
0.93.2	     I have encountered, that when in Content-Type is parameter name= with file
CityCat	     name, contained text 'html' (i.e htmlbook.zip) is leads to false positive
	     alarm, and message assumed HTML message. Analyze this error shows complete-
	     ly weak parsing code in Content-Type: line. And this code was fully
             rewritten. Also function strncasestr() was created (imported from source
             tree of system library libc, takes some advantages). So, we stop makring
             lines with '\0' and start using strncasestr(). This way one place I use
             strcpy() to copy some message parameter. Old way, with '0'-marking, this
             was work. New way, whtiout '0'-marking, it leads to overwrite memory in a
             big area (at least, control structure for this connect and sccusers table
             were overwritten). Now this bug was fixed, Also fixed bug with incorrect
             passing parameters to check_content() function - in header was passed
             without 'Content-Type' text, but in body() with! :-) Also some more debug
             prints were added and one debug procedure hexprint() (to print line in
             hex and char). Also some testing spam mail were added (with descriptions,
             what is a mail structure). FAQ and README slightly expanded. Added
             cvs2cl.pl in cfgaux directory (to use with 'make changelog')

08.08.2003   Improving sccusers/scchosts parsing code, avoid skip last line in file,
0.92.4	     when file doesn't finish with a empty line. Also avoid stop, when follows
CityCat	     comment, empty line, valued line or comment, empty line, comment. Some
	     configure.in clearance. New version numbering order: now in current branch
             will patchelevels before .5 generated odd version, after .5 - even.
             Slightly updated FAQ. Added debug level messages indication - now in
             message you can see debug level, which generated this message.

28.07.2003   Submitted in ports tree. Unfortunately, does not check without
0.92.2	     --with-debug option. Here were errors, which were corrected now. And,again
CityCat	     to submit in ports. And also, error found in kavmilter by Damir Bikmuhametov,
             follows me to check here. I have searched three entries of this error.
             Also today I have incorporated two small patches from FreeBSD ports maintainer
             Kirill Ponomaryow - about help in utilites.c and about one splitted to
             two lines message. Also in configure now does a check on FreeBSD version
             and doesn't check -lgnugetopt under -CURRENT

24.07.2003   These days was finished massive corrections work on sccmilter. Were cor-
0.92.1       rerted at least 5 errors: error in parsing scchosts/sccusers files,
CityCat      error in detecting Content-Type, when in isn't first line, error with
             empty charset line, error in config file parsing (this was libconf
             error). Also was added separate mode for incoming and outgoing HTML
             mail controls and commandline parameter --no-delete to prevent delete
             spam mail from isolator (when spam will need for further analysis).

16.07.2003   As you can see above, now we maintain our cool program through CVS ;-)
0.91.7	     So, each file now has their unique release number. Version numbering
CityCat	     keeps his tracking. No code changes, only corrections in part, binded
	     with CVS placing - in each file wad added CVS keyword (like above), in
             library some files has invalid license header, russian comments and
             obsoleted information. So, I already have 2 serious bugs tracked down
             and waited to correction. So,  because CVS doesn't like three-part
             numbering, we slightly changing numbering policy - we accumulating
             changes in last position and when accumulated enough, merge and create
             new branch. Here: configuration parameter --with-smutil was completely
	     dropped, because this library doesn't need at all. And now: here now
             will reflect only releases changes (we will use technology "branch-merge")
             For detail list of changes you should see ChangeLog file

04.06.2003   One bug, found by myself. When we checking mail, packed by mpack (and,
0.91.6	     probably by other software), mpack doesn't add empty line at end of the
CityCat	     message, line with boundary stopper is really last line in message. Of
	     cource, I can patch mpack :-) but I cannot guarantee, that none other
             software behaved like mpack. And processing boundary stopper is a
             standard. So, I decide to recognize boundary stopper. Now this bug fixed.

30.05.2003   I hope (very much), thst this is a last heavily-developed version. This
0.91.5	     version has chaged behavior with receiving and sending HTML messages:
CityCat	     old versions was strong check (both sender and receiver were authorozed
	     to send and receive HTML appropriately. New version have more soft check -
	     to send HTML only sender must be authorized, to receive - only receiver.
             This behavior was done, because (I do not know why) some people
             desperately linking with HTML messages format :-< Also was added some
             more debug prints when processing allow/deny to send/receive HTML
             messages and decline to use tail in debug message "mail discarded" or
             "mail rejected". Also contrib script to generate statistic about spam
             and enterprise violated mail sepatated to two pieces - one for spam,
             one for enterprise violated.

29.05.2003   If I do changes more thinkly, probably I shouldn't spent time to correct
0.91.4a	     bugs, follwed for these changes :-< I want to keep memory when filter
CityCat	     runs and rewrite functions to point to sccuser structure in table
	     instead of copying their contents to newly allocated memory. It was
             a good idea. But I have forgotten, that multiple recipients can missed
             in table (and will missed :-) ) and "empty" slot will keep only one.
             Price for this forget - filter crash, when I try to send mail to user,
             who doesn't know in SCC users table :-< I must returned to old memory
             allocation system (allocation one slot for sender and 5/10/20...for
             recipients). Also new error displaying code, unified for debug and
             non-debug states, adapted to batch processing to display spam statistic,
             new mnemonic error codes, rudimentary functions to implement enterprise
             violations (but still disabled). Also this day: mode detecting (for debug)
             moved from mlficatch.c to main program and merged (were global variables
             and local variables, now global only). And bug - charset detection false
             added to charset line rest (ex. charset=us-ascii; tralala=lala).

27.05.2003   YEP! I did it! I cannot understand, how this absolutely non-
0.91.3	     related fact can do so ugly action :-< It was one old "dude"
CityCat	     (yes, really "dude") mistake - I have tried write messages
	     to syslog before openlog() call :-< Yes, it is a mistake. But,
	     why SIGSEGV in absolutely non-related program part? (SIGSEGV
             repeately has issued in mlfi_close call when connect is closing).
             Go to next stage in testing phase. When new KDE finish to compile,
             this version also will placed on homepage (yep, I should to create
             a new division - KDE impressions :-) )

23.05.2003   Today I have finished manuals writing. And done first try to setup
0.91.2	     filter on my working box. For my pity, atfer correct one small bug,
CityCat	     filter start to crash :-( I do not know yet, why.

21.05.2003   I'd like to plan this version number to first relative stable release :-)
0.91.1	     But I can't win a figth win all other bugs :-( So, it will only a next
CityCat	     checkpoint. I have corrected all previous bugs, including ugly bug with
	     memory allocation in check_content(). But HTML isolation code still
             hasn't checking and doesn't working properly. Today also: HTML isolator
             now working. Normal messages now deleted even Isolate mode specified
             (exclude debug level > 100). When filter compiled with debug code, now
             at debug level 0 none debug messgaes will be given. We doing last checks
             before relesed 0.91.2, (it will also included manuals and updated README)

16.05.2003   This is first beta-quality release. Now I found and dismiss all mistakes
0.90.9	     which I insert 13-14 May after code remaking. Now filter correct process
CityCat	     situation, when unknown sender with known recipient, known sender with
	     known (but without charsets) recipient and correct parse Cotnent-Type
             in first part of multipart message. For my pity, I should add code to
             search and parse boundaries to check types of all parts in multipart
             message now.

14.05.2003   We continue our f*ck with debugging filter. Correct some algoritm bugs
0.90.8	     in Content-Type checking, correct some memory allocation bugs, rewrite
CityCat	     code to copy sender/recipient parameters recognizing - now in private
	     store stores not a structure itself, but structure pointer. Add some
             debug prints.

30.04.2003   At least I can arrive simple test mail. But now and again I have
0.90.7	     corrected many bugs, rerwrite some code parts, again sligtly change
CityCat	     configure script, again add lots (additionally) of debug prints...

29.04.2002   Small corrections, find lots of dumb mistakes, add --with-debug to in-
0.90.6	     clude debug messages (LOTS!), some code reorganizing. Still doesn't
CityCat	     send test mail :-(

28.04.2002   At least, today I can complied first version of this spam filter. Now
0.90.5	     only onehalf from declared features were implemented, but major. Will
CityCat	     be processed and do next versions after testing with spam fighting.
