688cdbc9ae9eb4a6282a93b2c79f0c7fb9207e29
[mmondor.git] / mmsoftware / mmmail / ChangeLog
1 $Id: ChangeLog,v 1.31 2003/10/11 11:20:11 mmondor Exp $
2
3
4
5 Release: mmmail 0.0.24 devl
6 Date   : July 11, 2003
7 By     : Matthew Mondor
8
9 * New features
10   - mailbox-specific statistic counters maintained with mmstat(3) are now
11     unified under mmmail|* rather than separated into mmsmtpd|* and mmpop3d|*.
12   - domain-specific statistic counters are now also maintained which total
13     the number of in/out messages and bytes for all mailboxes of the domain.
14     This is very useful to know how much one can charge for a domain, and/or
15     to generate pie graphics of distribution of bandwidth among the domains.
16   - Added STATFAIL_LOGIN and STATFAIL_PASSWORD configuration file options to
17     mmpop3d(8) which allow to easily detect failed logins.
18   - Added mmpop3d|total|logins mmstat(3) key
19 * Performance enhancements
20   - The configuration file parser was rewritten to be more efficient and
21     to hold cleaner code than the previous one which was migrated from
22     one of my first C programs many years ago :) The configuration files
23     format is now more flexible as well, although the current files will
24     parse properly without modifications still.
25   - mmhash(3) is now used by the command parser for more speed. Any such
26     speed improvement is always welcome when using userspace threads.
27 * Bug fixes
28   - mmstatd(8) and the mmstat(3) library had a bugfix.
29 * Other
30   - A minor code cleanup was done
31
32
33
34 Release: mmmail 0.0.23 devl
35 Date   : July 1, 2003
36 By     : Matthew Mondor
37
38 * Bug fixes
39   - The IP-address based connection rate and DNS cache expire thread used to
40     sometimes waste CPU cycles looping more often that it should, sleeping for
41     0 seconds between loops. Fixed.
42   - The same was happening to the message rate host-based cache expire thread,
43     which also was fixed.
44   - mmstatd(8) had a bugfix and was upgraded to 0.0.8
45 * Important
46   - The mmstat(3) key names were modified to be '|' separated rather than
47     '.' separated. Although I have been trying to avoid such a change which
48     obviously requires fixing alot of scripts I am using, it was proven with
49     time that the '.' character was too widely used and that '|' was ideal
50     as a replacement. It is not hard to use a script to use the mmstat(8)
51     reset command and convert all old entries to the new type if necessary.
52     As a result, filenames which comport '.' characters for which counters
53     are maintained are much better to handle and to isolate. The same applies
54     to IP addresses. 
55   - The maximum key name length now was bumped from 128 to 256 bytes. As
56     a result, a special log file synchronization will be required as was
57     the case for mmstatd 0.0.7 upgrade (and mmmail 0.0.22 upgrade). This also
58     requires mmstat clients using the mmstat(3) API to be recompiled.
59 * New features
60   - Per-mailbox message/bytes statistics are now being maintained via mmstat(3)
61     in mmsmtpd for incomming messages.
62   - Per-user/box logins/message/bytes/delete statistics are now being
63     maintained via mmstat(3) by mmpop3d.
64
65
66
67 Release: mmmail 0.0.22 devl
68 Date   : June 19, 2003
69 By     : Matthew Mondor
70
71 * Important
72   - Important changes to mmstat(3) and mmstatd(8) were made which require a
73     database synchronization procedure to be performed before upgrading.
74     See mmstatd/ChangeLog for details.
75   - The GROUPS directive in mmsmtpd.conf(5), mmpop3d.conf(5) and
76     mmstatd.conf(5) now expect groups to be comma-separated instead of
77     space-separated. The quotes then of course also become optional if
78     multiple groups are specified. This was made because mmreadcfg(3) library
79     is also used by other of my projects for which comma-separated groups
80     were also required.
81 * Various
82   - Fixed ALIGN_CEIL alignment macros which used to always add bytes even
83     if the value was already aligned properly. As a result a few bytes of
84     memory were often wasted.
85   - Interface of various lower layer functions and macros were improved, and
86     mmftpd was migrated to use the new ones.
87   - When an alias points to an invalid address, an error is now logged about
88     it for the administrator to notice and delete the alias.
89   - mmstatd will now perform much better when used with a large number of
90     keys, and will now retain the real time of the operation if it had to
91     be killed before it can incorporate the recovery logs and sync.
92   - mmsmtpd now uses mmhash(3) for it's FLOOD_PROTECTION cache which enhances
93     performance when many hosts are in the cache, and yields cleaner code.
94     As the number of RCPTs allowed per post is generally small, it still uses
95     linked lists for those with the old 64-bit hash for faster comparition,
96     but sequencial searching is still performed when checking against
97     duplicates. This will change if I ever obtain a request about someone who
98     needs to use enough RCPTs in a post to use a hash table for performance.
99   - mmhash(3) is now used by mmserver(3) as well, which should enhance 
100     connection validity and DNS hostname cache performance.
101 * Bug fixes
102   - The SQL SELECT statement in mmpop3d's auth_pass() function was erroneous
103     and often caused POP3 authentication problems. Fixed.
104
105
106
107 Release: mmmail 0.0.21 devl
108 Date   : January 9, 2003
109 By     : Matthew Mondor
110
111 * Bug fixes (thanks to Jeroen Oostendorp for reporting)
112   - HELO would not accept IP addresses. It now will.
113   - The first matching entry in the aliases list would immediately map
114     an address, even if there existed closer matches. The new algorithm
115     will only map the address to the best match. (See important changes
116     section for more details).
117   - The RESOLVE_MX_HELO configuration file keyword was changed to RESOLVE_HELO
118     and it's behavior changed accordingly, to resolve hostname's A record
119     rather than the MX one. It was erroneous to expect SMTP clients to have
120     valid MX records.
121   - The check_nofrom() function, used to check for a match within the
122     nofrom database table, would only match on a hostname basis if resolving
123     client hostnames was enabled and the address could resolve successfully.
124     It now will also always check if the IP address also matches no matter
125     what.
126 * Important changes
127   - When desired, it is important for frontend scripts to be able to generate
128     required password hashes. This has not been easy with the previous method,
129     which did not even use standard base64 encoding but a custom one on the
130     MD5 result. Calling external binaries such as mmpasswd is not ideal.
131     Moreover, I wanted to get rid of the mhash library dependancy.
132     The solution was simple: password hashes now consist of standard
133     crypt(3) generated strings. Both MD5 and DES modes are supported.
134     However, mmpasswd will only generate MD5 ones with crypt(3).
135     This also allows administrators to easily migrate from real system
136     users, as this is the way system user password hashes are stored.
137     An attempt was made to provide a utility to easily convert old hashes to
138     new ones; This however is impossible due to a bug in the previous method
139     which caused the last few bytes of the MD5 results to be lost during the
140     base64 conversion.
141     A recommendation is to generate random passwords for the users, notify
142     them via email and then activate the new version using the new passwords
143     say, a week afterwards. This password format will then remain unchanged
144     for next versions.
145     It is important that people upgrading from 0.0.20 or older execute the
146     provided MySQL script upgrade-0.0.21.sql. Also, the user_passwd field of
147     the user table will need to be updated using the new mmpasswd results for
148     each user password.
149   - The alias table was modified because of the new best matching algorithm
150     which could be slower with large tables. To cope against this, an alias
151     column was added (the upgrade-0.0.21.sql script will also add it). This
152     means that you will have to add the new domains after upgrading, and alter
153     the patterns to no longer hold the domain.
154 * Real asynchroneous functions support
155   - The Pth library has limits in that only one process is used for all
156     threads. The various pth_*() functions, and special care has to be taken
157     to prevent locking the whole process when a single thread needs to
158     perform operations, because of the non-preemptive nature of Pth.
159     Another side effect of using Pth is that SMP systems gain no performance
160     over single CPU systems. Moreover, some functions which can take a while
161     can lock the whole process when no pth_*() wrapper function exists to
162     do it. An obvious example is hostname resolving, which can lock the whole
163     process for long periods on slow networks.
164   - A solution was worked out to allow threads to execute real asynchroneous
165     functions without blocking the main process (and therefore allowing other
166     threads to remain responsive), and to even take advantage of
167     multi-processor systems where available.
168   - The technique uses an AmigaOS-like device task/thread which works over the
169     Pth thread-safe message passing mechanism, to serve the various
170     asynchroneous functions like a daemon would. This device internally uses
171     a pool of real asynchroneous processes to which it dispatches the requests
172     in a distributed manner via unix datagram sockets.
173   - The new ASYNC_PROCESSES configuration file option was added as a result,
174     which allows to specify the number of slave asynchroneous processes to run.
175   - This facility is currently used by mmmail to generate password hashes and
176     to resolve hostnames and MX records (when enabled).
177 * Miscelaneous new features
178   - If the daemons are compiled with -DNODETACH, the main process will not
179     fork(). Useful for debugging.
180   - If compiled with -DNODROPPRIVS, daemons will make sure they are not
181     started by the superuser to accept running, but will then not attempt
182     to perform any modifications on the current permissions. Useful for
183     non-privileged users.
184   - mmstatd can now be specified configuration file to use at startup
185     via command-line argument.
186   - mmstat library will now first check for MMSTATCONF environment variable
187     for the configuration file to use instead of the default
188     "/etc/mmstatd.conf". This can be useful to non-privileged users who want
189     to run mmstatd.
190     The default is to only accept to be started by the superuser and then
191     drop privileges.
192   - mmstat user client utility now supports hreport for more human readable
193     results (although less verbose).
194   - Configuration file option DELAY_ON_ERROR was added to allow to pause
195     at every user command error. Thanks to Jeroen Oostendorp for the idea.
196   - mmstat facility now allows wildcard pattern matching for UPDATE, RESET
197     and DELETE operations which operates atomically on all matching keys
198     for that uid.
199   - STATFAIL_EOF was added to mmsmtpd.conf which allows to maintain statistics
200     via the mmstat service about clients which disconnect improperly.
201 * Other
202   - Optimized the command matching loop by using fast packed hashes
203   - Other optimizations were performed by moving some variables in
204     closer scope, usually resulting in compilers using registers for
205     appropriate variables. This is especially useful for GCC which
206     ignores register directives.
207   - Significant code cleanups
208   - Several environment variables can now be set to modify the behavior
209     of the install.sh script (eg: change installation prefix, default
210     group/user, etc).
211   - The memory pool allocation system was optimized even more, now keeping
212     statistics on the average number of pages in use, so that it scales
213     better. Previously used pages are now privileged as well, which causes
214     unix kernels to allow processes using it to perform more efficiently,
215     as well as the underlaying allocator.
216   - Better synchronization with mmstat service, now using persistant keys
217     and has possibility to delete old temporary keys at startup using
218     wildcard matching.
219
220
221
222 Release: mmmail 0.0.20 devl
223 Date   : November 8, 2002
224 By     : Matthew Mondor
225
226 * New features
227   - The new STATFAIL_ADDRESS, STATFAIL_FLOOD, STATFAIL_FULL and
228     STATFAIL_TIMEOUT boolean confguration file options were added, which
229     allow the administrator to view statistics using the mmstat(8) utility,
230     optionally taking action on abnormal functional issues.
231     See mmsmtpd.conf(5) man page for more information.
232   - Added new CHROOT_DIR configuration parameter to optionally allow the
233     server to run enclosed into a chroot(2) jail.
234   - When starting the server it is now possible to specify the configuration
235     file to read. This allows to start several copies using different
236     configurations.
237 * Bug fixes
238   - When multiple groups feature was introduced in 0.0.16 devl, mmmail stopped
239     setting the initial group using setgid(2), assuming that setgroups(2)
240     would. This was not the case, and mmmail would then remain part of the
241     wheel group. It will now set the real and effective primary group, the
242     secondary groups, and then the real and effective user. The first group
243     of the GROUPS configuration file parameter is used for the primary group.
244     Although mmmail does not access files, this bug did not hurt it, but
245     let's not leave anything out considering security.
246   - The pop3d needed to replace any "\n.\n" to "\n..\n" while sending out
247     to of course avoid the client to consider the message completed when it
248     is not the case. This is now done. As a result it cannot send the
249     whole message using a single fdbrwrite() call, it has to perform several
250     ones as needed.
251   - Removed the annoying LOOP: debugging which used to flood syslog.
252 * Other
253   - mmsmtpd now has less overhead when creating new client contexts
254   - Now uses getnameinfo(3) instead of gethostbyaddr(3) to resolve hostnames
255     if RESOLVE_HOSTS is TRUE. This is more suitable with threads, since
256     gethostbyaddr(3) uses static data and required a mutex to be thread-safe.
257
258
259
260 Release: mmmail 0.0.19 devl
261 Date   : October 28, 2002
262 By     : Matthew Mondor
263
264 * Important bug fix
265   - omission of an unlinknode() in the new rate limit feature was fixed.
266     The daemons could lock in a loop taking 100% CPU time. Fixed.
267
268
269
270 Release: mmmail 0.0.18 devl
271 Date   : October 26, 2002
272 By     : Matthew Mondor
273
274 * New features
275   - Anti-DoS connection rate limit feature was added in mmserver library,
276     consequently new CONNECTION_RATE and CONNECTION_PERIOD configuration
277     file options were added. These are on a per-IP address basis.
278   - The bytes statistic counters were bumped to 64-bit.
279 * Bug fixes
280   - Yet again a build/install script bug; Permissions would not be applied
281     properly to newly installed files, the problem started to occur when
282     automatic directory creation was added. This was now fixed. Users should
283     consider upgrading as fast as possible, or to make sure that their 
284     configuration files in /etc/ have safe permissions.
285     See the following man pages: mmsmtpd.conf(5), mmpop3d.conf(5).
286     The install script will force safe permissions on the configuration files
287     while preserving them if they already exist.
288   - The staff group would not be created by install.sh if it did not exist.
289     Thanks to Jeroen Oostendorp for reporting this.
290   - The bandwidth shaping system was not accurate enough, as it used to
291     throttle by 4096 bytes blocks, requireing too much CPU time in syscalls
292     for high limits. It was rewritten using a new design which now only sleeps
293     if required after the maximum number of bytes allowed into a second were
294     transfered. So it now uses a second's worth of data resolution rather than
295     a 4096 bytes resolution. Some parts of mmfd library internals and API
296     were modified as a result (See mmfd(3) man page for details). Another
297     side effect is that it takes far less CPU time with high limits.
298     Thanks to Darren Price for the extensive testing and reports,
299     to Eric Weisenhaus and agrajag for reporting these earlier.
300   - There existed a potential race condition when hostname resolving was
301     enabled, which could cause a memory leak. This was fixed.
302     Thanks to Jeroen Oostendorp for reporting it.
303 * Other
304   - When mmmail needs to write out blocks of data it no longer uses mmfd(3)
305     library fdbwrite() buffering call but fdbrwrite() instead to save CPU
306     cycles and avoid buffer size splits.
307   - Some source code auditing and cleaning was made, several optimizations
308     were performed, some buffers were aligned to favorize word-copy/move 
309     operations as opposed to single-byte moves, in mmstring library).
310   - I thank everyone who are testing this software, and am again requesting
311     that it be evaluated, as I intend to eventually release mmmail v1 stable.
312     Support for more features will mostly be added into future mmmail devl
313     software, for an eventual mmmail v2. The current design drafts for it
314     can be found at http://mmondor.gobot.ca/software.html under the mmmail
315     TODO entry. For mmmail v1 release to happen, it has to be free of any
316     issues, it is therefore important to report any bug, to mmondor@gobot.ca.
317     It also would be nice if I could release with it a list of systems it is
318     known to work on, so if betatesters find some time to describe their setup
319     to me via email it would be appreciated. I yet have to test it again on
320     ultrasparc with Linux and Solaris for instance.
321
322
323
324 Release: mmmail 0.0.17 devl
325 Date   : October 11, 2002
326 By     : Matthew Mondor
327
328 * Bug fixes
329   - The build scripts did not behave as expected on systems which are using
330     bash for /bin/sh. Some script sections needed modifications to work
331     on both. Now seems to build fine on linux systems.
332   - Various new GCC versions warning issues were fixed.
333   - When installing, some directories were assumed to exist, they will
334     now be created when missing.
335   - A bug in mm_memmov() was fixed.
336   - Some systems, including linux, required libresolv to be linked with
337     the daemons. Fixed.
338
339
340
341 Release: mmmail 0.0.16 devl
342 Date   : October 6, 2002
343 By     : Matthew Mondor
344
345 * New features
346   - Now uses mmstatd(8) for persistant statistics storage and volatile who
347     database. This includes mmstat(8) administration facility.
348     This daemon also comports crash recovery using internal logging.
349     See mmstatd(8) man page for more information.
350   - Processes may now be part of several groups.
351   - It is now possible to set global maximum download and upload limits for
352     the whole server.
353   - Improved installation/upgrade make.sh and install.sh scripts, and use
354     of /bin/sh rather than make because of GNU/BSD make inconsistencies.
355   - mmmail(8), mmsmtpd(8), mmpop3d(8), mmsmtpd.conf(5), mmpop3d.conf(5),
356     mmpasswd(8), mmstatd(8), mmstat(8), mmstat(3), mmstatd.conf(5)
357     man pages were written.
358 * Bug Fixes
359   - Hostname sections starting with alpha characters only used to be accepted,
360     it now will accept alpha-numeric instead for the starting hostname section
361     character.
362   - The "Received:" headers were wrong about the "for" part. The previous
363     way do_data() worked prevented modifying the message header for each
364     RCPT, which was required. do_data() was now rewritten around mmfd(3)
365     fdbreadbuf() and "for" should be adequate as it's a re-implementation.
366     Thanks to Jeroen Oostendorp for reminding me of this bug.
367   - On various systems, including OpenBSD, the NetBSD-style __RCSID and
368     __COPYRIGHT, although useful, caused problems. They were now replaced
369     by custom macros, which should fix compiling issues.
370     Thanks to Dinos Costanti for reporting the issue.
371 * Other
372   - The code used to be compatible with older C compilers, it now was converted
373     to ANSI C. Use of __P() macro is no longer made.
374   - mmsmtpd now reads in messages faster than it used to, do_data() was
375     re-written in a way to avoid two previous memory copying passes on the
376     whole message. It now uses mmfd(3)'s new fdbreadbuf() function. Previously
377     it would call fdbgets() on a buffer, copy the string into a linked list,
378     using strdup(3), and after message reception another buffer would be
379     created by copying all lines from the list sequencially again.
380     These two passes can now be avoided, as fdbreadbuf() causes fdbgets() to
381     write it's lines directly into a single buffer. Of course we still can't
382     avoid the buffer copy/translation pass which occurs to produce the mysql
383     query, however.
384   - Some mmlist node manipulation functions were replaced by macros.
385     mmlist(3) now privileges pre-allocated nodes when inserting them back
386     in the free nodes queue, making a better useage of memory.
387
388
389
390 Release: mmmail 0.0.15 devl
391 Date   : July 27, 2002
392 By     : Matthew Mondor
393
394 * Bug fixes
395   - Fixed bandwidth shaping library, recent versions would totally ignore
396     bandwidth rate specified, because of erroneous 0 initialization.
397     Also fixed a bug where bandwidth would always be lower than requested.
398     Thanks to Eric Weisenhaus, Darren Price and agrajag for reporting these.
399   - Configuration option LOG_LEVEL would not accept values below 1
400   - Fixed mm_strnicmp() which would sometimes cause various problems
401   - Sometimes fdbgets() status would not be logged in case of error,
402     occuring during mail receipt, not disclosing why 520 Error was sent.
403   - The 520 Error sent when an error occurs receiving mail data was changed
404     to a 452 code error.
405   - Added LOG_LEVEL 4 for extreme verbosity (message DATA lines are logged).
406
407
408
409 Release: mmmail 0.0.14 devl
410 Date   : June 4, 2002
411 By     : Matthew Mondor
412
413 * Bug fixes
414   - The FROM:<> string was compared case-sensitively (thanks to Jeroen
415     Oostendorp)
416   - Various optimizations
417   - A pretty serious bug was fixed (which only affected glibc-based systems),
418     where syslog() would potentially be called with user supplied parts,
419     including fmt sequences. Thanks to BenoĆ®t Roussel for providing me with
420     a very detailed security advisory and to Guillaume Pelat for discovering
421     the problem.
422
423
424
425 Release: mmmail 0.0.13 devl
426 Date   : May 19, 2002
427 By     : Matthew Mondor
428
429 * Config file support
430   - Servers now reads /etc/mmsmtpd.conf and /etc/mmpop3d.conf which obsolete
431     previous mmversion.h pre-compilation issues. This also permits to leave
432     the daemon executables to be readable by other users, as passwords get
433     read from the config files. Of course configuration files should remain
434     only accessible by root.
435   - Defaults are set, configuration file is parsed, then command line
436     arguments parsed which may override some of the configuration file
437     settings.
438   - Syslog facility can now be specified.
439 * Bug fixes
440   - When the mysql server was down, and mmsql lib's mmsql_glock() was called
441     by the daemons, 100% CPU time would be used in an endless loop. The loop
442     boundaries and rate are now controlled properly.
443   - When a mail box is full, mmsmtpd now issues a 402 message instead of the
444     previous 502 code, which would prevent some MTAs from retrying later on.
445   - When too many DATA lines were sent through mmsmtpd for a message, it
446     would previously not output the proper error message properly, instead
447     two messages were being sent, the error one, and the successful one,
448     confusing most smtp clients.
449   - Thanks to Jeroen Oostendorp for beta testing throughly mmmail 0.0.12
450     and noticing the three above bugs which were fixed in 0.0.13. He also
451     made the MAIL FROM:<> and hops checking support suggestions.
452   - The process ID file was not created.
453   - Detected and fixed misuse of snprintf(), of which the returned value
454     should not be trusted.
455 * Support for MAIL FROM:<> added
456   - These used to be considered illegal, it now is possible for the admin
457     to allow them (crond and some intranet MTAs seem to use it).
458   - Only clients connecting from allowed list of hosts/addresses can use it,
459     the new nofrom MySQL table has been added for this purpose.
460   - * and ? pattern matching is allowed, and addresses or hosts can be used.
461 * Implemented maximum hops checking support
462   - New configuration file option can be set to limit the number of maximum
463     hops in a message in order to accept it. This helps filtering invalid
464     emails and spam.
465 * Install/Upgrade shortcut
466   - A make.sh script was now written which allows to compile and then install
467     or upgrade mmmail faster.
468   - Written scripts/upgrade.sql to allow easy transition from mmmail 0.0.12
469     or older to mmmail 0.0.13, without deleting the current database info,
470     since new tables and fields were introduced.
471 * Useful debug logging
472   - When using level 3 verbosity logging, replies will also be logged via
473     syslog to specified facility. This is especially useful for beta-testers
474     and debugging.
475 * (finally) Implemented aliasing
476   - Thanks to Ryan Werber, Daniel DeMaggio and Jeroen Oostendorp for
477     suggestions and ideas.
478   - Allows to setup aliases based on * and ? pattern matching, the new
479     MySQL table alias has been created for this purpose.
480 * Implemented message flood (mail bombing) protection
481   - Thanks to Daniel DeMaggio and Jeroen Oostendorp for the idea.
482   - FLOOD_PROTECTION boolean, FLOOD_CACHE size, FLOOD_MESSAGES and
483     FLOOD_EXPIRES configuration file options added.
484   - This is based on a per client host basis, addresses/hostnames are
485     cached with statistics in a hash table.
486 * Added various fields along the SQL tables
487   - Allows automatic scripts to identify/inactivate/delete unused boxes
488     or users using new datetime fields.
489   - Statistics on the number of logins for a user are now stored.
490   - Added an admin field to the user box, so that it becomes possible for
491     a frontend to allow an administrator to create users and mailboxes
492     for them. This however in the future should be restructured to be on
493     a per-host basis instead. Thanks to Christoph Dworzak and Daniel DeMaggio
494     for providing the idea.
495   - Added a user active boolean field to the user SQL table to permit easily
496     disabling access temporarily to a user without having to take out his
497     mail boxes or user entry from the database.
498 * Introduced a 64-bit hash function
499   - Internally used to improve various table lookups (already supplied
500     RCPTs and the FLOOD_PROTECTION cache for instance)
501   - Hash function was tested against duplicates with /usr/share/dict/words
502     and find / inputs with success
503 * Server too busy messages introduced
504   - When the maximum number of IP addresses have been reached, or when too
505     many connections from the same address occurs, a protocol-friendly message
506     is now sent before closing the connections. Some clients have been
507     confused with previous behavior.
508 * Multiple interfaces support
509   - Adminstrator may now specify several IP addresses to bind() to, as well
510     as a server hostname for each, using LISTEN_IPS and SERVER_NAMES config
511     file parameters.
512 * Now using getpwnam() and getgrnam() for more configurability
513   - Used to read /etc/passwd and /etc/group directly.
514
515
516
517 Release: mmmail 0.0.12 devl
518 Date   : April 22, 2002
519 By     : Matthew Mondor
520
521 * Fixed a nasty bug
522   - As the mmfd library was lately fully redesigned some daemon code would
523     not properly use the status results when a connection was unexpectedly
524     lost.
525   - This rendered easy to crash the daemon flooding with alot of connections
526     not exiting using standard QUIT command.
527 * Better disconnection logging
528   - The the general status/reason of the disconnection is now also logged
529     with the statistics via syslog.
530 * Compilation issues resolved
531   - Fixed a conflict which occurred between the BSD and linux usleep()
532     function not using the same argument type (unsigned long vs useconds_t)
533   - mmpasswd would not compile properly on linux
534
535
536
537 Release: mmmail 0.0.11 devl
538 Date   : April 17, 2002
539 By     : Matthew Mondor
540
541 * Implemented bandwidth management support
542   - mmfd library finally supports bandwidth shaping as well as buffering,
543     mmmail daemons now also take adventage of this, administrator may
544     optionally decide the speeds limits in KB/s for both reading and writing
545     data from with each client.
546 * Implemented transfer statistics
547   - Detailed statistics on the number of bytes transfered in both directions,
548     with number of RCPT/messages received/sent and DELE commands are now
549     logged via syslog at logout.
550 * More descriptive logging on DoS attempts
551   - When a connection is rejected because the maximum number of IP addresses
552     is reached, or that maximum number of connections for an IP address
553     is exceeded, mmserver library now reports the offending IP address and
554     reason via syslog.
555
556
557
558 Release: mmmail 0.0.10 devl
559 Date   : March 24, 2002
560 By     : Matthew Mondor
561
562 * Moved to CVS with unified libraries
563   - Less prone to some bugs caused by inconsistencies among code modules
564 * More efficient memory management
565   - mmlist's buffering capabilities now used by mmmail suite daemons
566 * More efficient I/O
567   - New mmfd library provides fast buffering around fds increasing execution
568     speed considerably, mmsmtpd used to read in messages slowly especially
569 * Bugfixes
570   - Some SMTP clients sending mixed-case hostnames at HELO would be refused
571     access, fixed.
572   - Under some circumstances it would theoretically be possible to crash
573     mmpop3d (a loop could possibly read outside of it's heap) although
574     I could not observe the effects, auditing the code after CVS transition
575     made me discover it.
576   - Some memory would not be freed immediately after mmsmtpd processed a
577     message.
578   - French accents and the like would be stripped out of messages by mmsmtpd,
579     fixed (mmfd.c).
580   - Will no longer refuse to start if lingering sockets with TIME_WAIT exist
581
582
583
584 Release: mmmail 0.0.8a devl
585 Date   : January 14, 2002
586 By     : Matthew Mondor
587
588 * Backported
589   - This release consist of an update to mmmail 0.0.8, with only part of
590     the changes of 0.0.9 (mmsmtpd on 0.0.9 seems to segfault, and I couldn't
591     find time to debug it, and needed to update my production servers to work
592     as soon as possible).
593   - The changes fixes the wrong connection IDs in logging, and the fdgets()
594     modification was applied as well as the LIST Out of range problem patch.
595
596
597
598 Release: mmmail 0.0.9 devl
599 Date   : January 6, 2002
600 By     : Matthew Mondor
601
602 * Fixed wrong connection IDs
603   - If more than one connection at once were originating from the same IP
604     address, the connection ID would remain the same. Fixed. This is essencial
605     to properly associates commands executed by each connection together.
606 * Modified mmfd.c's fdgets() function
607   - The line input function would cause telnet control sequences to be
608     inserted in the command string, as non-printable characters. They are now
609     ignored. This would cause some commands issued by rare clients to not be
610     recognized.
611 * Debugged LIST
612   - The LIST POP3 command when called with a message number parameter would
613     often fail with an out of range error. Fixed.
614 * Performance enhancements
615   - mmmail now uses the new mmlist and mmstr libraries just like mmftpd for
616     internal buffering preventing malloc() and free() from being called too
617     often. Moreover, general performance of linked lists related code should
618     be enhanced.
619   - The administrator can set the new BUFFERS variable in the mmversion.h
620     files to higher values for servers under more load for more buffering.
621
622
623
624 Release: mmmail 0.0.8 devl
625 Date   : November 26, 2001
626 By     : Matthew Mondor
627
628 * Fixed some of the error limits code, thanks to Ryan Werber for reporting
629   - Some commands such as RECV used to increase the errors number variable
630     which caused a POP3 client to fail finishing fetching all messages from
631     a box with many messages. Fixed.
632
633
634
635 Release: mmmail 0.0.7 devl
636 Date   : November 24, 2001
637 By     : Matthew Mondor
638
639 * Fixed broken TOP POP3 command, thanks to Tyler Mitchell for reporting it
640   - When rewriting many parts of the POP3 daemon for mmmail 0.0.6 version,
641     a bug was introduced which caused TOP command to always return invalid
642     range errors. Fixed.
643   - Moreover, TOP since the first mmmail version never worked as expected by
644     most users, where TOP <msg> 0 would display the message header lines, and
645     any higher number would be lines counted after that header. Fixed.
646   - As an anti-dos feature using TOP on the same message twice was not
647     permitted unless RSET was used. Now behaves normally.
648   - As POP3 protocol does not provide a help system, TOP command now mentions
649     that PAGE could also be used on it's result line.
650
651
652
653 Release: mmmail 0.0.6 devl
654 Date   : November 21, 2001
655 By     : Matthew Mondor
656
657 * mmmail and mmmail-pth were fusionned
658   - As alot of work as been performed on the pth daemon lately, and a single
659     edition is preferable to maintain, mmmail officially uses pth library
660     as of this edition. I mostly run it on netbsd personally and the pth
661     editions run awesome on it. I also run a linux server with it in a
662     production environment, so I consider it stable and efficient enough.
663 * Not using regex(7) anymore
664   - In order to make the command interpreter much faster, unvulnerable to
665     possible regex related bugs, and to make it more portable (yes, I have
666     noticed that besides POSIX pthreads, POSIX regex have problems on some
667     systems and required different regex pattern strings), I am now parsing
668     the commands myself. SMTP and POP3 commands are very simple to parse.
669     Moreover, jump tables are now used instead of switch/case. This permits
670     general better performance when using libpth especially, since it only
671     provides non-preemptive scheduling, among all threads, using a single
672     process's CPU time.
673 * UID and GID now internally evaluated from names
674   - The UID and GID to run as are now specified to the daemons as names as
675     found in /etc/passwd and /etc/group. The daemons now perform necessary
676     convertions to numerical values.
677 * Better permissions sanity checking when run from inetd
678   - Will now refuse to run if it can't make sure it runs as required user
679     and group
680 * HELO may optionally be required
681   - Will prevent the use of MAIL before HELO was used, if the admin wants
682 * Less strict on MAIL and RCPT format
683   - Some SMTP clients and servers used to not fully respect the strict RFC
684     MAIL FROM:<address@host> and RCPT TO:<address@host> forms, adding spaces
685     or omitting < >. mmsmtpd will now work with those.
686 * Customizable logging level
687   - The admin may now setup wanted logging level for each daemon.
688 * mmtcpfwd-like connection ID logging
689   - When connection/disconnection logging is wanted, now uses connection IDs
690     which permit to effectively link the events together.
691 * Implemented unstandard POP3 PAGE command
692   - As TOP often is not powerful enough to properly allow reading messages
693     via a telnet client for instance, PAGE <msg> <page> <lines> was
694     implemented, where <msg> consists of the message to be read, <page> of
695     the page number to be displayed, and <lines> the number of lines per page
696     of the terminal (with a maximum limit of 60).
697 * README was updated
698   - As many changes were performed in both daemons, although I personally
699     tested them a bit, next release should be a stable one, once this one
700     has been more tested on production systems.
701
702
703
704 Release: mmmail pth-0.0.5 devl
705 Date   : October 2, 2001
706 By     : Matthew Mondor
707
708 * mmsql_glock() and mmsql_gunlock() used to be implemented around flock()
709   - This required mmsmtpd/mmpop3d daemons to share a common filesystem
710     as /tmp/mmail-mmsql.lock file was used.
711   - Now uses MySQL's special GET_LOCK() and RELEASE_LOCK() functions.
712   - The daemons should now be able to run on two different hosts
713 * Fixed a small memory leak in mmpop3d
714   - mhash allocates data for the hash, which has to be freed although
715     it's documentation never mentionned it, when I noticed the leak and
716     re-read the auth code I found logic that mhash_end() couldn't free
717     the hash which we need to use afterwards, adding a free() fixed it.
718 * Note: The pth library version with which mmmail-pth was thoughly tested
719   consists of libpth14 (v1.4). I noticed that on linux, pth seems tricky.
720   These daemons run fine on NetBSD with libpth12-14, although it only seemed
721   to work fine on linux with libpth14. It used to segfault with libpth13 on
722   linux.
723
724
725
726 Release: mmmail pth-0.0.4 devl
727 Date   : September 28, 2001
728 By     : Matthew Mondor
729
730 * Fixed a bug which occured at times around strncpy() which implementation
731   varies from clib to clib.
732   - Unexpected mail box full issues were fixed
733
734
735
736 Release: mmmail pth-0.0.3 devl
737 Date   : Aug 12, 2001
738 By     : Matthew Mondor
739
740 * Portability issues
741   - As using POSIX threads cause portability issues among implementations,
742     this one was fixed to use the GNU portable pth thread library.
743     It is not really made to fully replace the other implementation using
744     POSIX threads, I also may merge them together eventually but are only
745     two concurrent versions at present time.
746
747
748
749 Release: mmmail 0.0.3 devl
750 Date   : July 9, 2001
751 By     : Matthew Mondor
752
753 * Data integrity enhancement
754   - mmsql_glock() and mmsql_gunlock() implemented in between mmsmtpd
755     and mmpop3d to prevent mailbox corruption which could happen if
756     they were both writing and deleting messages at once. This never
757     happened but as two SQL commands are required for mail insertion
758     or deletion, it is better to make sure that nothing can interfere
759     between them.
760 * Revision
761   - Removed all // comments and replaced them by /* */ ones to follow
762     standard C conventions
763   - Updated the README file
764 * Security enhancement
765   - The daemons no longer return to the client the strings they send
766     when they are unrecognized or invalid commands.
767
768
769
770 Release: mmmail 0.0.2 devl
771 Date   : June 3, 2001
772 By     : Matthew Mondor
773
774 * Bugfix
775   - Now uses mysql_ping() regularly to re-establish connection
776     with the MySQL server if it was lost, very useful for remote
777     server connections though TCP/IP.
778
779
780
781 Release: mmmail 0.0.1 devl
782 Date   : May 29, 2001
783 By     : Matthew Mondor
784
785 * Initial development release
786