[05/12/1999] -- JLT
  -- Fixed a buffer overflow in log_printf() where the input could have
     already been a BIG_BUF sized buf and format could have had extra stuff
     which then caused an overflow.
  -- Fixed a few places where a buffer was declared as size BIG_BUF, but the
     read_file() used HUGE_BUF (???!!?).
  -- Changed a LOT of the file reading code to use BIG_BUF so that the lower
     level code could use HUGE_BUF and thus prevent more stack smashing like
     above.  (JEREMY, PLEASE REVIEW THESE CHANGES, as I am SURE you had a
     reason for wanting to use a HUGE_BUF)
  -- Released 0.123a because of above changes.

[05/09/1999] -- JCB
  -- Sorry I haven't been doing much on Listar lately; I'm in deadline
     crunch mode at my real job.  Game companies go nuts near the date
     for E3 (the Electronic Entertainment Exposition).  When things
     quiet down a bit more towards the end of the month, I'll be doing
     a lot more work on it.
  -- Added a 'reply-to-sender' variable for Ryan Tucker.  This is a 
     boolean config variable.  If it's true, then the Reply-to line
     will be the sender's address.  This is intended to discourage
     people from sending to the list... it was requested by one of
     Ryan's list admins.  If this variable is set, the reply-to
     variable is ignored.  If it's not set, Listar acts like it
     always has before.

[05/04/1999] -- JCB
  -- Richard Stevenson ported Listar to Yet Another platform.  Now we
     work on Irix. :)
  -- Added the missing part of Richard's patch.

[04/26/1999] -- JG
  -- Modified listargate.cgi.dist to prevent security holes

[04/26/1999] -- JG
  -- Update debian/ tree to sync with the Debian 0.122a-2 dist.
     It now will build listargate in listar-cgi.

[04/19/1999] -- JLT
  -- Released 0.122a.
  -- Updated version number to 0.123a.

[04/19/1999] -- JCB
  -- Back from vacation!
  -- Replaced LICENSE in the package (the OpenSource Artistic license)
     with the GNU Public License.

[04/12/1999] -- JLT
  -- Added patch from Vadim Vygonets (vadik@cs.huji.ac.il) to implement
     hitchingpost style locking so that the listar files could be mounted on
     an NFS partition.   The changes I made are not identical to the patch
     Vadim submitted, but should work identically.

[04/08/1999] -- JLT
  -- Fixed a couple of buglets in subscribe/unsubscribe (LB#84)

[04/06/1999] -- JG
  -- Fixed Makefile.dist to remove the execute bit from lpm files

[04/06/1999] -- JG
  -- Change trim() to deal with a possible logic error
  -- Readibility and misc. fixes to Makefile.dist

[04/06/1999] -- JCB
  -- Added 'force-from-address'.  Whatever text string this is set to,
     the 'From:' field of the RFC822 headers will be rewritten as.  When
     this is set, X-original-sender will also be omitted, at user request.
     e.g.: force-from-address = Foobar Admins <admins@foobar.com>
     would make it so the message always appeared to have been sent from
     that address.  It probably should also nuke the RFC822 received
     lines and rewrite the message-ID, but I leave for Mexico tomorrow and
     don't have the time to do that sweeping a change. ;)

[04/05/1999] -- JLT
  -- Fixed a stupid bug in start_tolist() which broke things if the tolist
     was empty (ie, noone was set digest) (LB#82, #83)
  -- Fixed the typos pointed out by LB#81

[03/31/1999] -- JCB
  -- Fixed spelling error in one status message in acctmgr.
  -- Fixed the moderated-messages-not-being-in-digest bug.  Oopsie!
  -- ACTUALLY fixed digest, found one other problem which hadn't been
     solved.

[03/30/1999] -- JCB
  -- Removed old 'foo' debug note when I was trying to track down a MIME
     crash.  D'oh.
  -- Minor moderation tweaks

[03/29/1999] -- JLT
  -- Changed newlist.pl.dist and newlist.sh.dist to default reply-to to
     off instead of on.
  -- VERY UNTESTED CHANGE - I have added the tolist iterator code that forms
     the basis of what is necessary to allow the sendmail queue chunking and
     per user modifications.   I will be doing some more testing on this and
     implementing those two features soon, but I want people to play with
     this code and let me know if/when something breaks.   The MAJOR thing
     that this allows is that now digests will work (as will other flags)
     when a list is in megalist mode.  Duplicate users are still not stripped
     in megalist mode, nor do cc-lists work in megalist mode because I could
     not come up with any usable way to do duplicate user detection and
     compression while reading straight from the lists files.

[03/28/1999] -- JCB
  -- Commented the code for the acctmgr module.  This is the first of many;
     I'm going to be just running through and commenting all of the source
     files more extensively. :)

[03/27/1999] -- JCB
  -- Fixed a bug where Sender: and Errors-to could be duplicated.
  -- Added '-forcebounce' cmdarg, works like procbounce, only 
     forces the bounces to be processed even if 24 hours haven't passed.

[03/27/1999] -- JLT
  -- Fixed a bug in bouncer where we processed a watches file only if the
     watches file didn't exist.   umm.. *bang*
  -- Allowed %l expansion for listname in rfc2369-archive-url.
  -- Defaulted rfc2369 list name to the value of the "list" variable if it
     wasn't set.

[03/27/1999] -- JG
  -- Updated debian/debian-configs.diff to sync with 0.121a-6 in
     Debian; newlist.pl was trying to create files at the wrong place.

[03/27/1999] -- JCB
  -- Added unmime functionality to request address, and to moderator
     address (should allow you to drag a letter into a message and send
     it back, under Outlook or such, or use nmh's forward function).
     MOSTLY UNTESTED.
  -- Tested previous change, it works. :)
  -- Fixed a bug with RFC2369 List-help and digest.  Oops.
  -- Updated Listargate to use the new SUB/UNSUB methods, and to
     generate confirmation tickets.  Hey, it's starting to turn
     into a real (if basic) utility again. :)

[03/26/1999] -- JCB
  -- Oliver and many others will be happy; I just implemented one of the
     most often-asked-for features.  Humanize-mime now respects character
     set encoding, so humanize-mime will no longer clobber non-US-ASCII
     message encoding. :)
  -- Added rfc2369-listname.  Boy, there are a few optional RFC2369 
     headers I missed, though I don't think there are any others 
     remaining, nor do I think that any of the RFC2369 clients (other
     than my own PINE hack) support this one yet.
  -- Added 'setname' and 'setrole' admin commands.  (I'll probably move
     'setname' to have a user-form as well.)  These set a 'real name'
     and a 'position' for subscribers which are displayed in a list
     'review' report.  This was added for Baka-con's staff mailing list.
  -- Changed formatting of the 'review' report to be more friendly. :)
  -- Changed it again, to be friendlier to address-book scanning programs,
     like Pine's 'Take Address' feature.

[03/25/1999] -- JCB
  -- Fixed a compatibility problem with more recent qmail.
  -- Implemented the one RFC2369 header we were missing (List-software)

[03/24/1999] -- JCB
  -- Fixed long-standing formatting bug in posting-pass.
  -- Added 'bugs@listar.org' alias to forward to the automatic
     bug-tracking address at 'listar-bugs@bugs.listar.org'.

[03/24/1999] -- JG
  -- Updated fileapi.c to move the locking loop into file_lock(),
     closing bug #71
  -- Updated mystring.c to use more straight-forward logic in
     trim()

[03/24/1999] -- JG
  -- Updated core.c such that log_printf will detect reentry
     and immediately return in such a case

[03/24/1999] -- JG
  -- Updated debian/ files to sync to Debian 0.121a-5; automatic Listar
     logfile rotation

[03/24/1999] -- JLT
  -- Fixed a latent potential crash bug in variables.c

[03/24/1999] -- JCB
  -- Applied tolist_cmp patch from Oliver Wagner, to handle domain
     sorting for .co.uk and other three-level domains correctly.
     Thanks, Olli!  (owagner@vapor.com)
  -- Added RFC2369 functionality to digests, as well.  Same settings
	 will be used; might as well make this functionality work for
	 the digest users, who are equally likely to need it. :)
  -- Fixed signed/unsigned mismatch warning (FreeBSD, Win32) in the
     trim() code. :)

[03/23/1999] -- JG
  -- Updated debian/ files to sync with 0.121a-4; removes
     world-read/exec permissions on some directories for added security.

[03/23/1999] -- JLT
  -- Added moderator-approvepost similar to admin-approvepost so that
     moderators on a lists were treated as preapproved.

[03/23/1999] -- JG
  -- Added trim() to mystring.c (removes leading and trailing
     whitespace from strings)
  -- Rerwote parse_cfg_line() in list.c to use this, closing
     bug #46

[03/23/1999] -- JCB
  -- Applied a patch for RFC2369 help, allowing you to add a config
     variable of 'rfc2369-help', the string contents of which will
     be used as the rfc2369 List-Help string contents.  This patch
     was suggested (and contributed) by Richard Stevenson.  Boy, he
     likes submitting patches; we should just give him CVS access. :)

[03/22/1999] -- JCB
  -- Applied a patch for static modules, submitted by Richard
     Stevenson.

[03/19/1999] -- JCB
  -- Corrected a bug in RFC2369 headers that messed up any further header
     munging.  Oops.
  -- Corrected a bug introduced by the previous fix.  *sigh*

[03/19/1999] -- JCB
  -- Corrected some minor digest quirks.
  -- Added 'SETFLAG' and 'UNSETFLAG' hook types.
  -- Added hook handler for setting the DIGEST flag on lists which have
     digest disabled, to prevent it.
  -- Added hook handler for setting the MODERATOR flag, to allow sending
     a user a 'welcome' message explaining moderation to them when they
     are set moderator.
  -- Added file 'moderator-welcome' which maps to variable
     'moderator-welcome-file'.
  -- Added 'moderator-welcome-file' to the listar.cfg.dist

[03/18/1999] -- JCB
  -- Added 'socket-timeout', a duration variable which determines how
     long before socket reads timeout.  If not set or 0, it defaults
     to the old 30 second maximum.  This was added to fix a problem on
     a FreeBSD 3.1 box where initial read on connections seems to take
     about 45-52 seconds.
  -- Fixed a bug in the RFC2369 implementation.  Er, oops? :)  Now it
     works without eating messages.
  -- Fixed a bug in the userstat implementation, which also necessitated
     the addition of 'flush_file' to the Listar API.
  -- Fixed a bug in digest where if digest-transient was on and the digest
     directory didn't exist, digests were never produced.

[03/17/1999] -- JLT
  -- Fixed typo bug in internal.c which cause the behavior cited in LB#63

[03/16/1999] -- JLT
  -- Small bugfix which caused a 30 sec (approx) slowdown when attempting an
     ESMTP connection to the mail server.   it was a minor bug in the match
     to SMTP to allow multi-line headers.
  -- A couple of possible buffer overflows fixed.

[03/15/1999] -- JLT
  -- Two major bug fixes, and a few very USEFUL features (PRESEND,
     validate-users) means time for release.  0.121a released
  -- Versions updated to 0.122a

[03/15/1999] -- JCB
  -- Added 'PRESEND' hook type, converted send, antispam, and administrivia
     to use this type.  This prevents problems on approving moderated messages.

[03/15/1999] -- JLT
  -- Found two instances where we were printing a buffer to a file and that
     buffer could contain arbitrary data (including %) and we weren't printing
     it into a format string and thus could crash (in fact John Price's 
     installation did crash due to this)
  -- Fixed a small bug with virtual host conf file where it could double the
     listar-data prefix onto the lists-root
  -- Fixed a stupid bug in the mkdirs() function.   If the passed in path
     started with a / (as is common now that we made the meta-config variables
     change), the strtok() routine didn't honor the first / and return a 0
     length string.   So, we work around it.

[03/15/1999] -- JLT
  -- Added sanity checking code the user file reader.
  -- Logging of bogus email address and bogus user file lines at log level 0.
  -- Rewrote parts of tolist to user the user file reader instead of doing
     it itself.
  -- Checked in (under IFDEF) some other changes to tolist so that we can do
     batching of sendmail even under megalist (DO NOT ENABLE THIS CURRENTLY)
  -- exported the check_address function so that subscribe could validate
     addresess if desired.
  -- Fixed a core in tolist_cmp if one of the addresses was malformed.
  -- Added a 'validate_users' config var (defaults to 'false') which if
     enabled on the list will perform the bogus username regexp test.  This
     is a variable only because building and testing the regexp is a small
     slowdown (proportional to the number of users on the list).  I would
     strongly recommend turning it on every once in a while.
  -- Bogus usernames are not thrown away, merely reported, but that should
     no longer cause crashes in the tolist sorting routines.

[03/15/1999] -- JCB
  -- Fixed subscribe/unsubscribe to correctly be case insensitive for
     listname, just like every other command.  Worth noting it does this
     by converting the listname to lower case in all cases, so the list
     directories should all be lower-case only. ;)

[03/14/1999] -- JLT
  -- Figured the changes were sufficient to warrant a release, especially
     with a change that fixed a core dump.
  -- Updated version to 0.121a

[03/14/1999] -- JCB
  -- Added the ability for logfile to be an absolute path/filename,
     e.g. /var/log/listar or somesuch.  If 'logfile' begins with a
     '/' it is considered an absolute path, otherwise it's relative
     to listar-data (which is, by default, where Listar runs unless
     you're running the Debian configuration).
  -- Fixed fileapi instead of expire_all_cookies.  Even though the problem
     arose there, it's a better fix to add to fileapi. ;)
  -- Fix to expire_all_cookies, where a bug that only occured when
     lists-root was dead happened.
  -- Thanks to Richard Stevenson (Richard.Stevenson@vuw.ac.nz), we now
     compile under DEC Digital UNIX.  I won't swear we RUN under it,
     but apparently we compile under it. ;)
  -- Sanity check in log_printf, for if listar-data path had not yet been
     set.

[03/14/1999] -- JLT
  -- Fixed stupid bug where lists-root could get munged when switching lists
     context.
  -- Fixed the above bug better
  -- And yet another fix to it (this time in the virtual host config part)
  -- Can I EVER get this patch right?  Third times the charm.

[03/14/1999] -- JCB
  -- Some tolist changes in digesting (and one hook priority change in
     the tolist hooks in send.lpm).  Not heavily tested yet, but it should
     make digests work 'correctly' on cc-list equipped lists.

[03/13/1999] -- JLT
  -- Added GMT datestamp to spammers.log as per MichJ's request.

[03/12/1999] -- JLT
  -- Fixed missing file declaration for 'closed' so that getconf on closed
     would work and return the closed-file to the admin for processing.
  -- user_find and user_find_list now do loose or strict matching based on
     the value of 'no-loose-domain-match' which defaults to 'no' (meaning
     that matches will be 'loose' by default.
  -- removed user_find_loose and user_find_list_loose from API.
  -- Fixed the printing of 'subscribed as' in the which command to be
     insensitive to the case of the users email address.
  -- Added -help command line switch as per user-request.  It list all
     command line arguments (and their parameters if any)

[03/11/1999] -- JCB
  -- RFC2369 ('Use of URLs in Mail Headers for List Meta Commands...')
     implemented at user request.  Two required config variables:
     'rfc2369-headers' must be true, and there must be a 'hostname'
     variable (since we can't rely on the machine hostname, due to
     the addition of virtual hosting a few versions ago).  Two optional
     variables are 'rfc2369-archive-url' (which will used as the
     URL in the List-archive header), and 'rfc2369-post-address', which
     can be used as an override to the default <list>@<host> address
     in the List-post header.  Additionally, you can set 'rfc2369-minimal'
     to true, which will ONLY put List-help and List-unsubscribe in the
     headers (as opposed to ALL the RFC2369 headers, which are -help
     -unsubscribe, -subscribe, -help, -post, and -archive).
  -- Added 'no-digest' config variable.  If true, digest processing is never
     done, and the DIGEST flag is ignored on users (e.g. they still receive
     individual posts).

[03/10/1999] -- JLT
  -- added snprintf.c, a free implementation of snprintf and vsnprintf that
     was among the sourcecode to Jitterbug.  Define NEED_SNPRINTF in the
     Makefile if you need it.
  -- cast uses of rindex() to char * to stop the complaints on Solaris
  -- Added (int) casts around args to ctype macros/functions under SunOS5
  -- Fixed a few 'control reaches end of non-void function' errors (showed
     under BSDI)
  -- Fixed debug_printf() to print the time to stderr instead of stdout
  -- Explicitly cast two pointers in cookie.c/gen_cookie() to be signed
     since BSDI whined about the assignment from unsigned to signed.
  -- Changed the code to only use our homegrown version of flock() on
     systems that need it.  Define NEED_FLOCK in the makefile if you do.
  -- Removed -g from the module makefiles when compile with SunOS_5.

[03/10/1999] -- JCB
  -- Reported to SunOS 5.  Whew!  If anyone has a more stable SunOS 5
     or Solaris box they'd like to contribute for doing ports, contact
     me. :)
  -- Cleaned up Windows makefile.

[03/10/1999] -- JLT
  -- Fixed some includes of dirent.h where it should have been sys/dir.h
     under SUNOS_5.

[03/09/1999] -- JLT
  -- Added 'remove' as an alias for 'unsubscribe' at the request of John
     Price.
  -- Fixed some variable initialization bugs.  Patch provided by Johan
     Danielsson <joda@pdc.kth.se>.
  -- Somehow the listar.aliases.dist file got a bit screwy.  Cleaned up
  -- Fixed two bugs with the meta-conf variables.

[03/08/1999] -- JCB
  -- Added support for SMTP servers with multiline welcome banners
     (such as 'no spam allowed' warnings).  Thanks for this patch
     go to Ian R. Justman <ianj@esper.net> :)

[03/08/1999] -- JLT
  -- Moved userstat.h into inc where it belonged.
  -- Converted two // style comments in mystring.c into /* */ style.
     Comments in the // style break compilers other than gcc :)
  -- Updated the RPM spec file.
  -- Added the 'required for RHCN' changelog section to the spec file. 

[03/08/1999] -- JCB
  -- Up'd CVS version.h to 0.120a
  -- Added parsing for reply formats with no whitespace, at JT's
     request.
  -- Moved administrivia hook priority, to make it occur BEFORE the
     archive number increment.
  -- Made admins immune to administrivia check
  -- Fixed listar.org (nausicaa.net)'s clock, which might make CVS
     a little weird for a couple minutes until it sync's.

[03/08/1999] -- JCB
  -- Haven't had any bug reports from the folks using Listar from CVS,
     so it's time for a release! :)
  -- Packaged and released 0.119a
  -- ACK!  Caught a major administrivia bug, so repackaged 0.119a.

[03/08/1999] -- JCB
  -- Added a new 'administrivia-include-requests' configuration option.
     The existing 'include-requests' only included the request for a task
     requiring admin confirmation (e.g. when someone tried to subscribe to
     a closed-subscription list).  Now, if this is set true, the
     administrivia notes ('<user> subscribed to <list>') will also contain
     the entire original message that generated the subscribe request.

[03/08/1999] -- JLT
  -- Found a small bug in bouncer where the newproc temp file wasn't getting
     unlinked correctly.

[03/04/1999] -- JCB
  -- Made sure everything compiles clean and runs under Windows
     again. :)

[03/04/1999] -- JCB
  -- Fixed a Win32 compile problem in administrivia.
  -- Added new functionality to closed-mode subscribe.  If
     'include-requests' is true and subscribe or unsubscribe mode is
     closed, below the job/eoj block for adding the user, the original
     message that generated the request (AND all headers) is included.
     (At Mike Johnson's request.)

[03/04/1999] -- JLT
  -- Made make_moderated_post(char *reason) into an API call (it was duplicated
     three times in the code).
  -- Exposed the address_match(char *addy1, char *addy2) function in the API.
  -- Fixed a bug in administrivia module that attempted to check the top 6
     lines  in a post, but only did so if the lines started with Subject:

[03/05/1999] -- JCB
  -- Changed closed-post to also convert non-member submissions to 
     moderated posts, so the admin has a chance to approve them.

[03/04/1999] -- JCB
  -- Added a very basic administrivia module.  Anyone who wants to 
     clean it up/make it more advanced can feel free to do so.  If you're
     grabbing this from CVS, remember you'll either need to add 
     'administrivia' to the 'MODULES' line in your Makefile, or remake
     your local Makefile from Makefile.dist.  And, of course, remember
     that -d flag to cvs update. :)

[03/04/1999] -- JCB
  -- Antispam now displays which rule the spam was blocked on.

[03/04/1999] -- JLT
  -- Whoops, forgot to free the adminsyntax memory from the command structure.
  -- Found a small meta-conf bug where listarchive's paths were relative to
     current directory (ie, the path listar was at) rather than listar-data
     as they should be. Fixed.
  -- Fixed a couple of typos in the Win32 Message-ID lines in core.c and
     forms.c and added a call to rand() to replace the getpid() on unix.
     [problem spotted and fixed by Ryan Tucker]

[03/03/1999] -- JLT
  -- Cleaned up places where we duplicated code that existed in an API
     function to use the API function instead.
  -- In the core code changed file functions to use the file API.
  -- Added 'which' command to stats modules which lists all lists that a user
     is subscribed to.
  -- Added syntax options to the add_command() function which are dumped
     by the 'commands' command.   A command can specify a syntax, an
     altsyntax, and an adminsyntax.   The altsyntax is ignored if there is
     no normal syntax.   Take a gander at new 'commands' output to understand
     it :) [note, no commands have an altsyntax currently, it's there for
     the future]

[03/03/1999] -- JCB
  -- Minor formatting change to filearchive (the Listar task footer is no
     longer included at the bottom of a requested file).
  -- Cleared up the phrasing of appsub / appunsub ticket wrappers.
  -- If a job/eoj block is present in the message body, the header will
     not be parsed (on the assumption that the job/eoj block is what you
     really want done).

[03/02/1999] -- JCB
  -- Changing CVS notification setup to work better.
  -- Altered text from '--' signature marker.
  -- Tried changing the CVS setup again (yes, this comment was contrived,
     as a way to test CVS logging)
  -- Changed the README slightly.
  -- Added README.CVS
  -- Altered Message-ID generation, to ensure uniqueness.

[03/02/1999] -- JLT
  -- Removed the API hooks to the nuke_* functions (except for nuke_tolist).
     There is *NO* reason that the modules should be nuking the vars, commands,
     hooks or other internal tables.
  -- Added meta-variables 'listar-root', 'listar-conf', 'listar-data',
     and 'listar-modules'.   See the listar.cfg.dist file for info.
     THIS CHANGE IS *NOT* WELL TESTED.
  -- Added handling of bounces returned from the local MTA (ie, local
     addresses which no longer resolve).   I don't know who this will affect
     but please let me know if it starts causing problems.
  -- THis is a very contrived comment (testing something with CVS)

[03/02/1999] -- JCB
  -- Added 'add' and 'del' commands as aliases for 'subscribe' and
     'unsubscribe', at Oliver Wagner's request.
  -- Added X-Listar-Bounce header, made bouncer ignore bounces with
     that header (so bounces to someone set CCERRORS don't generate
     an infinite loop).

[02/28/1999] -- JCB
  -- Another round of changes starting.
  -- Added the ability to 'register' variables, to allow self-documentation
     and such later, though this isn't yet being used.
  -- Added 'review' command to statistics module.

[02/28/1999] -- JCB
  -- Marked previous set of changes as PRE199.  Pull that out, until 
     all these new changes are tested.
  -- Added userstat.c / userstat.h, to have a file for arbitrary 
     user statistics.
  -- Changed header/body size check, and antispam check, to send 
     messages that fail the check to the moderator.
  -- Added accting.c to the stats module, which tracks user traffic
     across a list.
  -- 'stats' command moved from acctmgr to stats, placed in accting.c, 
     and altered to also report some stuff from userstats.
  -- Minor fix to moderated mode, where it could mangle headers still.
  -- Minor qmail compatibility fix.

[02/28/1999] -- JCB
  -- Fixed appsub/appunsub dying on inability to create cookie file.
     It will now die gracefully, and report the error.
  -- Fixed subscribe/unsubscribe bug where it was possible to get a
     command executed with no list context.
  -- Fixed nodupes blocking moderated lists.
  -- Clarified subscribe/unsubscribe confirmation ticket messages.
  -- Altered cookies to not clobber each other ever, by adding PID to
     the cookie formula.  Left untouched under Windows, as I can't get
     a pid.
  -- ACKPOST message clarified.
  -- ACKPOST behavior altered.  It used to be that if you were ECHOPOST,
     ACKPOST was ignored except when a message was submitted to moderator.
     Now it's always used.
  -- Moderator method changed.  This prevents user auto-appended things, 
     like signatures, PGPMail signatures, or those obnoxious WINDAT 
     business cards from messing up moderation.
  -- Fixed a parse bug that would mess up header parsing under PMMail for 
     moderated messages. (Thanks to Steve Lamb for pointing it out.)
  -- Added support for RFC822 Resent-From (for 'Bounce' command under PINE
     and other mailers).  This can be disabled by 'deny-822-bounce' being
     set to true, just like with 'deny-822-from' and RFC822 From: lines.

[02/25/1999] -- JCB
  -- Fixed address handling to not choke on not-dotted local hosts.
  -- Minor Win32 fixes for virtual hosting.

[02/18/1999] -- JLT
  -- Applied patch submitted by Vivek Khera to fix post-password usage in
     send. (including post-password-file change)
  -- Added the post-password-file to the default listar.cfg.dist
  -- Added post-password-reject file definition mapping to the
     post-password-file above.
  -- Changed tolist.{c,h} to strdup and free the lists, flags, usernames
     so that we only take up as much memory as we really need and don't waste
     any.  This should make our memory footprint on larger lists a bit nicer.
  -- Changed (some) other structures to dynamic memory instead of fixed
     buffers as well. This should also help our memory footprint a bit.

[02/15/1999] -- JCB
  -- Added cvs-notify stuff to the automatic log handling, so checkins to
     the CVS repository will be sent to all developers.
  -- Set up anonymous pserver access.
  -- Set up listar-cvs as a mailing list to handle CVS notifications.
  -- Minor digest bug fixed, where digest was not building its
     directories.

[02/15/1999] -- JLT
  -- Small nit where we didn't protect against errant chars in the pathname.

[02/13/1999] -- JLT
  -- bug in appunsub fixed.   It's really hard for a user to be unsubscribed
     in confirm mode, when the confirmation code calls user_add instead of
     user_remove.   Oops.

[02/10/1999] -- JCB
  -- Since I fixed one Bouncer problem, and JT fixed the other, and there
     are some other cleanups involving the file locking changes which
     we made, it's time for a release.
  -- Released 0.118a
  -- Up'd CVS version to 0.119a

[02/10/1999] -- JLT
  -- Jeremy's fix didn't fix the problem.  Changes made to bouncer.c to
     prevent lock contention.

[02/10/1999] -- JCB
  -- Fix for Bouncer locking up when several bounces come in within
     seconds of each other.

[02/09/1999] -- JLT
  -- FreeBSD3.0-Release had a problem loading modules from anything other
     than an absolute path.   dynmod.c modified to build the module name to
     load based on the path, the modules directory, and the module name.
  -- lpm-def.h was missing an include of sys/types.h before the include of
     dirent.h.  (Apparently FreeBSD3.0-Release dirent.h doesn't bother to
     include it itself even though it requires it.  How annoying)
  -- Fixed a bug in nodupes detection where two dupes arriving within a very
     short time (as in microseconds) of each other could both go through to
     the list.
  -- Fixed a small bug where a malformed subject line (ie Subject:) with
     no actual text could cause the header information to get messed up.
     The newer way is a bit cleaner anyway.
  -- Fixed a bug where .digestinput files weren't getting unlinked if you
     didn't have a digest directory.


[02/08/1999] -- JLT
  -- updated the spec file to 0.118a and added the stuff that is needed for
     Red Hat Contrib|Net.   I moved the bug reporting info down into the
     package description.

[02/07/1999] -- JCB
  -- Released 0.117a
  -- Updated CVS version to 0.118a

[02/07/1999] -- JLT
  -- Fixed nasty bug in file locking semantics.   Basically, fcntl (which
     linux, and I believe most glibc platforms uses to implement flock) has
     a bug where closing one file can at times cause other locks to go away.
     This is what was occuring with the userfile wipes.   The answer is that
     instead of a close and reopen in someplace, open the file w+ initially
     and rewind it.   Not the best of fixes, and there could still be lurking
     gotchas.   Anyone with lots of file locking experience want to take a
     crack at it?

[02/07/1999] -- JCB
  -- Split cmd_subscribe and cmd_unsubscribe into primary commands,
     and many subhooks of type 'PRESUB' (to give other modules a chance
     to check against and reject subscriptions) and 'POSTSUB' (to give
     other modules a chance to trigger actions on subscribe).  'PREUNSUB'
     and 'POSTUNSUB' also exist.
  -- Made confirm mode work for unsubscribe.  unsubscribe-mode accepts
     the same values as subscribe-mode, to allow them to be set
     differently.  If unsubscribe-mode is not given, it defaults to
     subscribe-mode.
  -- Added 'no-administrivia' setting. :)
  -- Altered 'appsub' (and 'appunsub') notices, so they use the job/eoj
     format and can be sent right back.

[02/04/1999] -- JLT
  -- removed duplicate definition of sort-tolist from listar.cfg.dist
  -- removed duplicate definition of nopost-file from listar.cfg.dist

[02/03/1999] -- JCB
  -- JT made the fix to ensure config file came first, but forgot to
     alter it so it LOADED the config file.  So -s was still failing on
     some virtual host setups, because the alternative lists-root was
     only being set AFTER the command line arguments were parsed... and
     THEN the alternative config was loaded.
  -- Moved definition of lists-root default.  If you didn't specify it in
     your main .cfg file, things broke.  Now it works correctly. :)
  -- Added 'post-password', a string you set in the config file.  If a
     letter to the list does NOT contain 'X-posting-pass: blah' (where
     blah is the password you provide), posts will be rejected.  The
     X-posting-pass line is stripped from the header before sending.  
     This is a modification at the request of my actual employer, who is
     using Listar for mailing lists. :)

[02/02/1999] -- JLT
  -- Small bug with the handling of the config file commandline switch (-c)
     fixed.   Since other command line parameters (such as -s) require the
     information from the config file, the -c parameter MUST come first on
     the command line.
  -- Added dates to the file index output in the filearchive module
  -- made spit_status use varargs

[02/02/1999] -- JLT
  -- Fixed a bug caused by Jer's fix to my bug where you couldn't reset the
     lists-root.
  -- Fixed a longtime bug in read_conf_default which made jeremy think one of
     my other changes was wrong, when it wasn't.

[02/02/1999] -- JCB
  -- Fixed some MASSIVE bugs JT introduced, which totally broke dynamic
     modules as well as a few other things.

[02/02/1999] -- JLT
  -- Fixed an annoying bug where a conf-parm set in the global (or domain)
     .cfg file could be wiped and not reloaded.
  -- Fixed a bug in the virtual domain stuff.

[02/01/1999] -- JLT
  -- Some fairly major changes to allow true virtual hosting.
  -- Added a -c command line switch which allows you to specify an alternate
     config file.   *NOTE* The main listar.cfg file is still read first.
     This file should merely be used to override variable from that file.
     (such as lists-root or the listar-owner or the mailserver, etc)
  -- Added a new config file variable 'lists-root' which is defaulted to
     'lists' in the listar.cfg file.   This specifies where under the
     listar main directory, listar will search for lists.
  -- With the above two combined you can do true virtual hosting in that
     you can specify a -c <domain>.cfg for each virtual-domain invocation
     of listar and then store the lists seperately by setting lists-root
     in each <domain>.cfg file.
  -- If you do split things this way into multiple list-roots, you WILL
     need to run a seperate --procbounce or --procdigest for each list-root
     via the -c <domain>.cfg parameter.

[02/01/1999] -- JCB
  -- Added 'digest-altertoc' boolean variable.  If it's set, the
     alternative digest table of contents is used, where each entry
     is the message number, the sender, and the subject.

[02/01/1999] -- JLT
  -- Added access control to the filearchive index and get commands in
     response to user-request.  Variable is 'file-archive-status'; setting
     to 'list' means only list members can access the file archive; setting
     to 'admin' means only admins can access it.

[01/31/1999] -- JCB
  -- Fixed a nasty bug in listarchive, where if mbox archiving failed,
     MH archiving would never be called.
  -- Fixed another nasty bug in listarchive, where MH archiving would
     always fail.

[01/30/1999] -- JCB
  -- Updated CVS version.h to 0.117a
  -- Fixed an egcs compile warning pointed out by John Goerzen.

[01/28/1999] -- JCB
  -- Added 'union-lists'.  Similar to cc-lists, but only for incoming
     checks.  If you create a list that has cc-lists of a couple other
     lists, and union-lists of those lists, that list is effectively a
     total union of the other lists (e.g. users can post as if they were
     subscribed, AND they get the posts).  Format is same as cc-lists.
  -- Released 0.116a!  Finally! :)

[01/27/1999] -- JCB
  -- Minor changes to listar.spec phrasing in one text output. :)

[01/26/1999] -- JLT
  -- cleaned up and added a listar.spec file to simplify building Red Hat
     RPMs in the future.

[01/21/1999] -- JCB
  -- Added a 'no-dupes-forever' variable.  If set, the nodupes will never
     be cleared.  Was needed to be added for an obnoxious, misconfigured 
     EXIM server. :/

[01/20/1999] -- JCB
  -- Added functionality to prevent on-list loops for mailservers that are
     stupid and try to relay a post back to the list.  (Say WHAT?)

[01/16/1999] -- JLT
  -- Fixed spelling of 'recieve' (sic) everywhere it occured.

[01/16/1999] -- JLT
  -- Removed the LPM-cheat hack from admin, antispam, base, digest, send
     and stat.  All modules now use the new module API directly.
  -- Made ListarGate work with new module API.
  -- Fixed a bug in digest where if megalist was set, it wouldn't restore
     the old list context.
  -- sorted TODO by priority (at least in my mind)
  -- removed the 'sample' module.   There are enough other samples now and
     it was woefully out of date.
  -- Fixed a bug in digest where when walking the directory, if the config
     file didn't exist, it would do a continue and thus retry with the same
     list.  Insta-loop if you had any bogus dirs in your lists directory.
  -- Fixed a similar bug in bouncer.c

[01/14/1999] -- JLT
  -- Removed the LPM-Cheat hack from bouncer, listarchive, filearchive
     and acctmgr modules.

[01/13/1999] -- JCB
  -- Added fix for the job/eoj reply parsing functionality.  It was
     eating the first line of job/eoj blocks... bad.

[01/08/1999] -- JCB
  -- Added 'PROTECTED' flag to Bouncer.  Users flagged 'PROTECTED' will
     never be unsubscribed or set vacation by bouncer.  This flag can only
     be set by admins.  Admins are assumed to have PROTECTED implied by
     being an admin.
  -- Added 'PREAPPROVE' flag to Send.  Users flagged 'PREAPPROVE' will never
     have their posts forwarded to moderators on a moderated list.  This 
     allows certain users to never have to have their posts checked.  (It was
     a requested feature.)  Admins are -not- assumed to have the PREAPPROVE
     flag unless the 'admin-approvepost' variable is set to true.

[01/07/1999] -- Courtesy of Seattlelab
  -- Regexp signed/unsigned warning fixed.

[01/05/1999] -- JLT
  -- Finally got around to getting dynamic modules under BSDI to work
     correctly.   Yes, they now work.

[01/05/1999] -- JCB
  -- Changed all 2-digit years to 4-digit years to prevent egcs from whining.
     Geez.
  -- Added processing for '--' to divide message body and signature.  Basically,
     acts the same as putting 'end'. :)

[01/04/1999] -- JCB
  -- Cleaned up sourcefiles after Windows mangled the cr/lf. :P
  -- Added ability to parse job/eoj blocks in reply-formatted messages.
  -- Added use of -f cmdarg to read from a file instead of stdin.  Useful
     for some Windows implementations.
  -- Added support for stupid mailservers which don't include the SMTP from
     field.  ExCUUUUUSE me?  Whose bright idea was THAT implementation??  If
     your mailserver is stupid like this and you have deny-822-from set on,
     Listar will not work.  Please make a note of this.  :)
  -- Switched all remaining fgets() to read_file(), to work correctly under 
     Win32.
  -- Makefile(s) altered to compile under SunOS 4 again.  OOOPS!
  -- Added putc_file.  Abstraction is Your Friend.

[01/01/1999] -- JCB
  -- Happy New Year!
  -- Brought the rest of the Received: headers (in form.c) up to RFC spec.
  -- Added an anti-loop function, to prevent Listar from ending up in an
     endless mail cycle if something goes wrong.
  -- Further abstracted all file operations.
  -- Wrote the directory abstraction.  Again.  Now it can be used recursively,
     which was needed for filearchive.lpm
  -- Listar now can compile on Windows.  Be afraid.  Be very, very afraid.
     However, the Windows-specific code will be removed from public releases
     for the moment; there's someone who wants to distribute the Windows port
     commercially, and until that's settled one way or the other...
  -- Several minor aesthetic changes.
  -- Upped the version officially to 0.116a.

[12/31/1998] -- JCB
  -- Finished module API rewrite.  Phew!  On the plus side, you now only
     need a few include files to write a Listar module, instead of the
     entire source distribution.  Additionally, Listar modules are now
     denoted by a '.lpm' extension instead of the standard '.so', since
     they now have a specialized format.

[12/30/1998] -- JCB
  -- Begun rewrite of entire module API.  Aaaugh!  But this will allow us
     a much cleaner module API (allowing ports to Win32, and to systems
     which don't implicitly resolve symbols from a dynamic binary back
     into the calling binary).
  -- File API and locking API abstracted further.  Still more work to do
     here, but this is another place that is good to do this.  Not all
     systems can do blocking locking from fd or FILE *... having the
     stream type obscured from the user is a GOOD thing.

[12/28/1998] -- JCB
  -- Hope everyone had a good holiday season.
  -- Disabled digesting for megalists.  It created too many problems.

[12/23/1998] -- JCB
  -- Cleaned up after JT's changes of yesterday so that Listar compiles
     -Wall -Werror again. :)
  -- Added two new variables, 'header-max-size' and 'body-max-size'.
     If they aren't set, there are no size limits.  If they are set,
     posts are rejected.  This needs to be altered to send a message 
     to the user, and I will do so later today.

[12/22/1998] -- JLT
  -- Changed Received headers to be RFC 822 compliant.

[12/18/1998] -- JCB
  -- Added a 'megalist' variable.  Setting this on a list cripples some
     Listar functionality to a small degree, and will be less efficient on
     small lists.  However, for lists in the range of 45,000 users, it
     works a hell of a lot better.  Setting 'megalist' to true for a list
     implies 'sort-tolist = no'.
  -- Added an 'always-unsub' variable which causes Bouncer to unsubscribe
     on maximum transient bounces, instead of just setting the user
     vacation.

[12/17/1998] -- JCB
  -- Thanks to Jeff Johnson (trn@trn.nu), Listar now compiles under 
     OpenBSD, too!

[12/16/1998] -- JCB
  -- Added a 'sort-tolist' variable.  If this is present, the tolist
     will be sorted using the Listar sorting logic.  If this is NOT
     present or set to false, no sorting of the tolist will be performed.
     For base sendmail installations, this is useful.  But for huge lists,
     (40,000+ users) the delay in sorting MIGHT outweigh the benefits.
     Also, it's less necessary on qmail or Postfix installations, and so
     you save time by not having it sort.  Previous versions of Listar
     always sorted.

[12/13/1998] -- JCB
  -- Another minor fix to bouncer, to set the first error time
     CORRECTLY.  Oops.
  -- Fix to nodupes.

[12/11/1998] -- JCB
  -- Fix to Bouncer, where in a certain situation, admins could be
     unsubscribed.  Gyack.

[12/10/1998] -- JCB
  -- Simple Listar WWW interface ('Listargate') added.  This needs a LOT
     of work before I'll consider it production-level.

[12/07/1998] -- JCB
  -- Added an 'antispam' module for blocking spam mail.  Really
     preliminary little thing, but I wanted it.

[12/01/1998] -- JCB
  -- Created 'predigest' command in digest.  This sends a copy of the
     latest digest issue as-is (e.g. whatever is currently in the digest
     buffer).  Hey, it was requested.

[11/23/1998] -- JCB
  -- Bug fixed in Digest; if transient-digest was false but no one was set
     digest, it would still nuke the digests. :(

[11/17/1998] -- JCB
  -- I should mention that with forking digests, it is NORMAL to see a
     second 'zombie' Listar process if the forked process finishes before
     Listar's primary process.  This is because Listar doesn't care about
     the exit code of the child process, but the child sits there after
     execution as a 'zombie' until Listar either exits, or if I write
     something to eat the pid.  I'm looking into the best way to handle
     this overall (since I also want to catch SIGCHLD)... it has no real
     negative effects at the moment, BUT if it makes you nervous, just set
     'digest-no-fork = yes' in your lists. :)
  -- Added 'default-flags' string variable.  DO NOT USE THIS UNLESS YOU
     ARE *SURE* YOU KNOW WHAT YOU ARE DOING.  This sets the default flags
     for when a user subscribes.  For example, if you wanted them to
     default to receiving a little acknowledgement when they post, and to
     being in digest mode, it would be:
       default-flags = |DIGEST|ACKPOST|
     The leading and trailing pipes are VERY IMPORTANT to Listar's
     internal parser.  If you forget them, you WILL quite possibly hose
     your list until you fix them and all users added with mangled flags.
  -- Fixed a bug where 'end' didn't work in static linked situations.
     Ooops.
  -- Decided it was time for a full release.
     Released 0.114a
  -- Updated CVS version to 0.115a
  -- Added new config variable, 'owner-fallback'.  If this is true, 
     and 'administrivia-address' is not set for a list, then the 
     'list-owner' address will be sent the administrivia notes instead.
     If it is false (or not set), and the administrivia-address is not
     set, then no administrivia note will be sent.  It will still fall
     back to the list-owner address for administrivia needing confirmation
     such as subscribe requests to a closed list.

[11/16/1998] -- JCB
  -- admin, admin2, and getconf changed to use job/eoj blocks.  This means
     you can literally just forward them back and not worry about
     formatting. :)
  -- Added 'nopost' as a file for getconf.  Oops!
  -- Removed Makefile from CVS tree, added it as Makefile.dist (to avoid
     overwriting copies on sandboxes).  Removed -Wall -Werror and -g from
     Makefile.dist.
  -- Replaced listar.cfg.dist with Mark Scudder's replacement for it,
     with the additional variables (reply-expires-time and nopost-file)
     added.
  -- Added fixlist.pl.dist to the scripts directory.  Fixlist is something
     I wrote after I accidentally blew away my listar.aliases file; it
     is newlist.pl stripped down to just the portion that builds the
     aliases, so it allows you to just run fixlist.pl for a given list
     and rebuild the aliases if you lost them. :)
  -- Nuked old TODO list - half of it was done anyway - and wrote a
     new (very short) one.
  -- Minor fix to digest name system (it was 00-11 on month before, now
     it's 01-12)
  -- Added a function to prevent duplicate messages.  Sometimes if a 
     mailserver spazzes out, it'll try to send multiple copies of a 
     given message.  Listar now tracks the Message-ID of each message it
     receives for a list in a given day, and will reject duplicated
     messages.  It nukes this after a 24 hour period and starts over.
     If you wish to use this, set the config variable 'no-dupes' to 
     true.
  -- Digest had a formatting bug when the subject line got clipped.  This
     has been fixed.
  -- If you set the config variable 'digest-no-toc' to true in a list
     config, then you will not have the table of contents in the digests.
     THIS BREAKS RFC1153.  But since we already allow it to be broken
     with digest-header and digest-footer, I don't consider this a huge
     issue.  And JT wanted it.

[11/15/1998] -- JCB
  -- Added a new admin flag, NOPOST.  This needs to be set/unset from
     within an admin wrapper if you wish to set it on users.  It causes
     the user in question to be unable to post to the list until you unset
     the flag - useful for disciplinary action.  With this, of course,
     comes another config variable - this one for listar.cfg.  nopost-file
     should be a string set to the filename to use.  There is, as always,
     a default text that will be used if you do not provide one.
  -- Parser changed, it no longer silently eats errors anymore.  Mail sent
     to listar can contain '#' as the first character of a line, or
     '//' as the first two characters, and the line will not be processed.
  -- Admin stuff changed so you don't have to cut/paste.
  -- Added 'Expiry-Date' header to normal responses.  Admin stuff and
     files sent to the user will not be expired, but normal command texts
     will be automatically removed by mailer software that understands the
     expires headers.  Of course, another listar.cfg variable has been
     added; 'reply-expires-time'.  It's a duration, and defaults to 1 day
     if not set.
  -- Added new command, 'admin2'.  Works like the 'admin' command, but
     everything between 'admin2' and 'adminend2' will be recorded and
     placed into the wrapper that is sent to you.  Allows you to compose
     your admin commands when requesting the wrapper. :)
  -- Listserv style //job and //eoj commands added.  Putting these into
     a message will cause Listar to only parse what is between them.
     There can be multiple //job | //eoj blocks in a single message.
  -- Beta 4 of 0.114a released.  I think I'll just go release on Monday,
     since there have been no bug reports for b2 or b3.

[11/14/1998] -- JLT
  -- Fixed a couple of small bugs in the digest naming code.
  -- Fixed a small bug in chmoding the listar executable in the src Makefile
     (This really only affects BSDI)

[11/14/1998] -- JCB
  -- Finally made a change to have '<user> subscribed to <list>'/
     '<user> unsubscribed from <list>' as subject for administrivia.
  -- subscribe/unsubscribe now set list context.  Oops!
  -- Added a strreplace to mystring.c
  -- Fixed mkdirs() so it worked. :)
  -- Added a new per-list config parameter, 'digest-name'.  This
     determines how digests are done.  Basically, it's a special string
     where certain tokens are replaced.  The tokens are:
       %l - List name
       %v - Volume (no field width)
       %V - Volume (minimum 2 digits)
       %i - Issue (no field width)
       %I - Issue (minimum 5 digits)
       %m - Month (minimum 2 digits)
       %d - Day of month (minimum 2 digits)
       %y - Year (final 2 digits)
       %Y - Year (including century)
     If not provided, it defaults to 'lists/%l/digest/V%V/%I', which was
     the old digest filename format for the initial release of Digest 3.0
     along with Listar 0.114a.
  -- Built 0.114a beta 3 for the testers.  I think we're pretty close to
     final.
  -- Added two tokens to digest-name for JT
       %n - Issue formatted to 3 digits (think 'number' to remember it)
       %M - Three-letter month name ('Oct', 'Dec', etc.)

[11/13/1998] -- JLT
  -- Added a function mkdirs to fileapi.c.  It takes a path, and creates
     all the directories along that path if needed.  If the trailing
     char on the path is not '/', it assumes the final element is a file
     name and doesn't try and create it.   If the first character of the
     path isn't /, it is relative to the LISTAR executable.  Thus, this
     is a general purpose function.

[11/13/1998] -- JCB
  -- Fixed a nasty bug in digest; didn't affect anything else, but made
     digest do effectively nothing if you had 'moderated' defined
     (regardless of value).
  -- Addition of digest-max-time, a duration variable which defines the
     maximum amount of time digests are allowed to sit unsent.  This
     allows you also to not have to put -procdigest in crontab as long
     as you define a value for all lists. :)
  -- Addition of digest-no-fork, a boolean variable which determines
     whether or not digests should be processed in a subprocess.  This
     is more useful for me for debugging than end-users, but if you have
     some ethical objection to fork(), you can use this. :)
  -- Subject tag is removed from subject lines in digests.
  -- Fixed a bug in get_seconds() that caused it to have issues on parsing
     some duration strings.
  -- Fixed a bug in mystring.c for strcasestr()
  -- Added 'digest-strip-tags' to determine if subject tag should be 
     stripped or not.  (JT wanted the tags to remain in on his lists.)
  -- Added 'digest-send-mode' to determine what logic should be used
     for sending the list when listar is called with -procdigest.  If
     'digest-send-mode' is 'time', it will ONLY check the time and will
     not mail the digest if less than the digest-max-time has passed.
     If it is 'size', it will ONLY check the size and will not mail the
     digest if the digest is not larger than the given size.  If it is
     'procdigest', then it will just mail the digest regardless.  Defaults
     to 'procdigest' if not set.  As a result, you can now do something
     like 'digest-max-time = 7d' and 'digest-send-mode = time', and the
     digests will be weekly. :)
  -- Added 'digest-no-unmime', a boolean variable.  If set to true, 
     posts to digests will be left unaltered, MIME encoding-wise.  If
     false, then even if the list is set to humanize-mime, the digest
     will contain de-MIME'd versions.
  -- Released beta2 of 0.114a to the testers.
  -- Another minor RFC822 hack fix.

[11/12/1998] -- JCB
  -- COMPLETE rewrite of digest, because of the level of functionality
     people wanted.  I was feeling inspired, and this time, digest should
     actually work fairly nicely.  It also complies to RFC1153 (the RFC
     that specifies a standardized digest format for mailing lists) now.
     This is so extensive a rewrite that I will make a separate digest
     administration readme.
  -- Rewrote a chunk of fileapi.c to add some new functionality.  Also
     made sure that it handles trying to close a NULL stream gracefully.
     Admittedly, this should never happen, but it's still better to 
     log it and try to recover than to just plain segfault.
  -- Changed makefile back to using WFLAGS=-Wall -Werror, and did a LOT
     of cleanup to ensure that everything compiles -Wall -Werror again.
  -- Added list headers files.  Hey, we've had footer files for a while,
     why not?  :)  You need to add 'header-file = text/header.txt' to
     listar.cfg to use this.  (Or whatever you want the header path to
     be instead of text/header.txt - remember that it's under the list.)
  -- Lots of other minor distribution cleanup.
  -- Upped version number to 0.114a, since 0.113a was in limited release
     (to the FFML and some other folks).  I think I'll have a few people
     test this, and then I'll be ready to do a new release.
  -- Added 'admin-approvepost'; for moderated lists, this means that
     admins' posts will be automatically approved.
  -- Redid the website!  Added a 'variables cheat sheet'.  Feedback is
     welcomed. :)

[11/11/1998] -- JCB
  -- New variable added, 'max-rcpt-tries'.  Sometimes, sendmail will take
     a little too long replying.  This determines the number of times that
     Listar attempts to get a status from sendmail before giving up.
     Defaults to '5'.  This only determines the number of times the IO
     buffer is queried for a 25x acknowledgement of receipient ok, NOT
     a number of times to try redoing the RCPT TO.
  -- Archive functionality altered to avoid using unmime if humanize-mime
     is set to false.  Oops.
  -- Moved digest updating to AFTER hook instead of SEND.  This should
     fix the 'messages being eaten' error.

[11/09/1998] -- JCB
  -- Added a new variable, 'sendmail-sleep'.  If this is set to 'yes',
     there is a 5 millisecond 'sleep' between acknowledgement of an RCPT
     TO line and continuing on to the next RCPT TO.  On some sendmails, it
     puked if you sent too many RCPT TO lines too quickly.
  -- Tweaked memory handling in tolist, to avoid problems on concurrent
     copies of Listar running with lists of 1000+ users.

[11/08/1998] -- JCB
  -- Ack!  Fixed RFC822 From: bug.  This had been fixed once before, but
     the fix was somehow lost in the CVS rebuild. :(

[11/08/1998] -- JLT
  -- Fixed a bug in digest where global listar.cfg variables were getting
     wiped as it went from list to list.
  -- Fixed a bug in digest where mode wasn't being reset correctly when
     it did the digest send check.
  -- Fixed a bug in mystring.c where it broke on BSDI
  -- Added a compile time define of whether GNU's version of strftime
     is to be used.  See comments in the makefile

[11/07/1998] -- JLT
  -- Added the ability to the digest module to send the digest if it
     exceeded a certain size (set by digest-file-size in the config file).
  -- Found a bug in set_var where if you reset a var with a value generated
     by a get_var() to that same variable you clobbered the variable.  Odd
     case but fixed now.
  -- Multiple digests for the same day are NOT versioned differently yet.
     I will probably do this soon.

[11/07/1998] -- JCB
  -- Added 'setaddy' command.  'setaddy <address>' is used for those 
     who can't alter their mail from and whose ISP is messed up about
     how it addresses mail (ix.netcom.com shell accounts, for example).
     'setaddy' only succeeds if the username matches the existing from,
     the username is NOT root, AND the domain is a valid higher-level of
     the current one.  loki@ikkoku.maison-otaku.net can setaddy to
     loki@maison-otaku.net, but not to loki@dragoncat.net.  This
     functionality can be disabled by 'allow-setaddy = no' in the
     listar.cfg file.
  -- Added user_find_loose() and user_find_list_loose(), versions
     of the normal commands which will match on the second-level domain.
     (e.g. 'loki@ikkoku.maison-otaku.net' and 'loki@maison-otaku.net'
     are equivalent).  Right now, only the closed-post check uses
     this, but if it proves to be useful, it'll get used elsewhere.

[11/06/1998] -- JCB
  -- Added a hook to add 'X-list: <listname>' to the headers.  Hey, it
     makes procmail sorting easier.
  -- Fixed typo bug introduced by JT's last alteration.  For shame, JT.
     And listar even whined about this one and told you where it was when
     you ran it.
  -- Finally changed it so if there's no 'subject' line and the list has
     a subject tag, it'll be added - allowing sorting on subject tags
     even when people omit a subject line. :)
  -- Temporarily moved the 'procmail' stuff to a back burner; it didn't
     work too well.  If anyone out there wants to rewrite a better
     procmailrc and newlist procmail generator, be my guest, I'd love to
     get one!
  -- And since digest works nicely, and everything else is pretty cool,
     I'd say it's time for... *gasp* ...a release!
     Released v0.112a
  -- Updated CVS version.h to 0.113a
  -- Change to tolist.c; users flagged ADMIN are always sorted to top
     of tolist, ensuring that admins receive mail first.
  -- Timestamps altered so that pine can sort on them without puking.

[11/05/1998] -- JLT
  -- Added a -priv flag (in the send module) which controls whether that
     invocation of the list obeys the reply-to setting.  It's useful for
     me in a very specific case.  But rather than put it into my list-specific
     module, I placed it here to prevent adding the reply-to header and then
     removing it again in my module.  This seemed a more elegant solution.
     Basically it allows a list to operate in normal mode, and (assuming
     the sysadmin or whomever has set it up, a private mode).   All message
     sent to either list are archived with the normal list, and digested
     with it.  All messages sent to the private list, when replied to will
     go to the author of the message instead of the normal list reply-to.
     
[11/04/1998] -- JCB
  -- CVS is back online (Nausicaa.net had been cracked), and the Listar
     project is back in business!  Got 0.112a into CVS, and we have a 
     clean distribution image again.  A couple more tweaks and I'm going
     to re-release.
  -- The mailing lists are back online as well, but we've semi-obviously
     lost all of the subscribers who were previously on the lists.  If you
     were a subscriber in the past, you will want to resubscribe.

[11/03/1998] -- JLT
  -- Fixed a bug in tolist that only occured when one flag
     contained another.  ('DIGEST' and 'DIGEST2')

[11/03/1998] -- JCB
  -- Added DIGEST2 flag for JT's Acka lists.  This should probably get
     split off into an Acka module, considering the amount of custom stuff
     for these lists.
     (as a comment to defend this belonging in the main dist, DIGEST2 allows
     a user to receive the normal list mail and the digest instead of only
     one or another.  I've seen other lists where this is useful other than
     just Acka --JT)

[11/01/1998] -- JCB
  -- Re-versioned to 0.112a, since 0.111a had been distributed to a few
     people for testing.

[10/30/1998] -- JCB
  -- Fixed digest.  Oops.  I think this module is cursed.
  -- Finally(!!) tracked down the elusive tolist bug that has been
     appearing on and off since about 0.107a... and squashed it!
     No more occasional puking of 'No response from server' and such. :)

[10/28/1998] -- JCB
  -- Rewrote digest.
     It now happens nightly; you should add a 'listar -procdigest' to
     Listar's nightly crontab.  The DIGEST flag makes people receive
     digested versions of a list.  If a list has no posts for a given
     day (hence, no digest), it sends a note to that effect to digested
     users (so they know they didn't get dropped from the list or
     something).  This can be prevented by setting the NODACK (No Digest
     ACK) flag on a subscription.
  -- Fixed something with RFC822 From: headers and older e-mail software.

[ --- During this time period, Nausicaa.net, the main dev box that the
      Listar project uses, was cracked and destroyed.  The project got
      disorganized as the central CVS repository was gone, as were the
      mailing lists and FTP site.  Slowly, things began to rebuild. 
  --- ]

[09/15/1998] -- JCB
  -- Added a newlist-pm.pl.dist default script which handles setting up
     lists for use with a single user, using procmail, and user-filters.
  -- Added a default 'listar.procmailrc' file.

[09/14/1998] -- JCB
  -- Remembered to update the version.h in CVS archive.  Whups!

[09/13/1998] -- JCB
  -- Added 'SUPERADMIN' flag.  NOT CURRENTLY SETTABLE BY CODE.  This flag
     is currently only set on the address added when a list is created.
     To upgrade old lists, go through and manually add the flag.  Users
     with SUPERADMIN set on a list can unsubscribe other admins, or set
     flags on other admins.  OR OTHER SUPERADMINS.  'SUPERADMIN' only
     allows that override functionality, it does NOT duplicate the ADMIN
     flag; both are required for SUPERADMIN to work.
  -- Minor changes to newlist scripts to account for the SUPERADMIN flag.
  -- Released v0.110a

[08/23/1998] -- JCB
  -- Added sys/types.h to filearchive.c to prevent compile errors on
     FreeBSD.

[08/20/1998] -- JCB
  -- If administrivia-address is not provided, defaults to list-owner.
     (It should have done this before, but those fun code errors sneak in
     when you least expect 'em...)

[08/11/1998] -- JLT
  -- Fixed a small bug in the 'deny-rfc822' code where it didn't skip over
     spaces between the colon and the address, causing closed-post lists to
     not work in some cases.

[07/29/1998] -- JLT
  -- Changed the 'commands' and 'flags' command to always list ADMIN only
     commands or flags only settable by ADMIN.
  -- Changed set/unset commands to use nosuch() to report list non-existance
  -- Changed nosuch() to no longer report that lists are case sensitive
  -- Fixed a small bug that Jeremy introduced in the pointer bug fix.
  -- Made sure that default new list scripts set the CCERRORS and REPORTS
     flags on the initial admin
  -- Updated all commands to use nosuch() if it was relevant.

[07/29/1998] -- JCB
  -- set_context_list() is now case-insensitive.
  -- Fixed a parse bug on ASCII art in people's signatures. :P
     Guess I can't complain, since I have a little Kilroy in my
     sig file...
  -- Fixed a nasty pointer bug.

[07/25/1998] -- JLT
  -- Bug where two adminvfy commands for different lists didn't work correctly
     even though they should have.  The problem was del_var("adminmode").
     Since adminmode was a protected variable (which it needs to be), it
     wasn't legal to delete it.  I created a new function destroy_var which
     deletes a var regardless of protection.  This is *DANGEROUS* in that it
     means that *ANY* module can now trash any config variable.  However, it
     was the only solution to the problem that I could find.  Jer, if you can
     fix it better, do so and remove the irrelevant parts of this comment
 
[07/22/1998] -- JCB
  -- Changed formatting for MAIL FROM and RCPT TO to comply with qmail
     1.01 and 1.02.

[07/21/1998] -- JCB
  -- Fixed two egcs warnings, one in variables.c, one in regexp.c.
     Thanks to Christian Vogel for finding 'em. :)
  -- One more qmail fix, this time to send.c... can I get access to a 
     qmail server out there, somewhere?  It'd make my life a lot easier
     for testing...
  -- Updated the heavily out-of-date TODO list.
  -- Added support for RFC822 From: headers, to make things a little
     friendlier for some mailers.
  -- Moved 'Processing error watches...' message in Bouncer to debug
     level 5 instead of 0.  Should get rid of some really nasty log-bloat.

[07/20/1998] -- JCB
  -- One more 822bis change for oLa... we're almost there.

[07/19/1998] -- JCB
  -- We seem to still be having 822bis compliance issues.  I wish I had
     a qmail server to try this on. :P
  -- I'm going to release a special copy of 0.110a-development to oLa to
     test.

[07/18/1998] -- JCB
  -- Fixed to be 822bis compliant.
  -- Decided it was about time to release 0.109a...
  -- Upped CVS version to 0.110a

[07/11/1998] -- JCB
  -- Fixed some minor set.c compile quirks.

[07/11/1998] -- JLT
  -- Fixed a bug where unsubscribe under admin mode allowed a list context
     switch.
  -- Fixed a bug under unsubscribe and subscribe while in admin mode that
     left the list name pointer uninitialized.
  -- If a list context switch under admin mode is attempted, only error if
     it's too a list other than the current admin mode list.

[07/01/1998] -- JCB
  -- Added new debug level, '10', will dump all IO to listar.log

[06/30/1998] -- JCB
  -- Happy 30th Birthday, JT.

[06/24/1998] -- JLT
  -- Subject tag is now case insensitive

[06/01/1998] -- JCB
  -- Found more time to work on Listar.
  -- Fixed problem in CCERRORS.
  -- Added stuff to TODO list.
  -- Gave up on digest, will rip out and rewrite for next release.  *sigh*

[05/17/1998] -- JCB
  -- Whee, I'm finally 21.  No, I don't know why I put this in here.

[05/08/1998] -- JCB
  -- Fixed possible buffer overflow in set_var().
  -- Fixed minor quirk in digesting where a post was doubled.

[05/06/1998] -- JCB
  -- VERY sorry things have taken this long, but work stuff took over
     my life for a little while.  Anyway, Listar's back on track. :)
  -- Digest module is done!  'digest-file' must be set for digesting to
     work, and it's in the same format as the mbox archive file/path.
     E.g. if you set 'digest-file = digests/mylist', it will make
     'digests/mylist.1', and 'digests/mylist.2', etc.  'digest-from'
     will override the Listar 'from' line.  And, of course, the
     'DIGEST' flag makes a user use digested mode instead of normal
     individual posts. :)  'digest-days' is the number of days that
     must elapse before a digest is sent.  Defaults to 1.  If a
     day has passed and there are no posts to trigger it, the digest
     will not be sent until the next post.  I know, I know, this isn't
     the best way to do it, and in the next version it'll handle
     cron-style as well, just like the bounce processing.
  -- A few other minor twiddles and fixes.
  -- v0.108a released!
  -- Version in CVS updated to 0.109a.

[04/27/1998] -- JCB
  -- Whee!  Found some time to work on Listar again!
  -- Fixed moderation to work with mailers that alter forwarding format
     by putting spaces at the beginning of all lines.  This will STILL
     not work with all mailers.  The problem is that mailers that alter
     the message formatting in forwarding will not only destroy commands,
     but also the message body. :(  Hence, I recommend 'mail' or 'pine'
     or 'elm' or Eudora or whatever.  Outlook alters the forwarding
     format, as do some others.  Sorry.

[04/06/1998] -- JCB
  -- Corrected 'unresolved symbol' error in send module introduced by
     JT's change.
  -- Fixed crash bug in nosuch, yikes!

[04/03/1998] -- JLT
  -- Added code so that hook types were dynamically defined.  Currently
     defined are "AFTER", "SEND", "SUB", "UNSUB", and "FINAL" hooks.
  -- Moved tolist handling functions onto their own hook "TOLIST" which is
     called from the top of final_send.  Digest and other modules can now
     add a TOLIST hook to get a chance to manipulate the TOLIST to their
     hearts content.

[04/03/1998] -- JCB
  -- Fixed a bug in getconf where it tried to close nonexistant files.
     Eeep!
  -- Fixed a signed/unsigned bug under FreeBSD.
  -- Tinkered with cookies so <user>+<filter>@<host> filtering, which is
     sendmail standard, would work for subscribes.
  -- If a valid command is found in subject, listar won't parse body
     for further commands.
  -- Version 0.107a released.
  -- Version in CVS updated to 0.108a.
  -- Quick change (and fix for change) to acctmgr, sanity check in
     set_context_list().

[04/02/1998] -- JCB
  -- Changed bouncer (again) to write out a variation on the new watch
     format.  Now it also stores the first time an error occured.  This
     allows the error watch report to tell you the range of errors (e.g.
     the person has bounced 14 messages, but it's been in 20 days) as 
     well as the error message ('Deferred: connection timed out' or
     similar).
  -- Fixed the obnoxious seg fault error Sean reported.  Finally.
     It involved the new '> ' reply method (which only Sean had 
     installed, hence why only his installation saw this error) and
     a reply line that was otherwise blank.  Feh.  Fixed now.

[04/01/1998] -- JCB
  -- Changed the bouncer module to write out a new watch format (it still
     supports the old one for reading) which contains the error text.
     Also altered the actual Error Watch report format to list the error
     text, if present.  Useful if you don't have CCERRORS on and want to
     know why someone's in the watchlog. :)

[03/31/1998] -- JCB
  -- Fixed behavior for cc-lists.  *sigh*
  -- Added two new functions to tolist module to allow better behavior for
     cc-list situations.

[03/30/1998] -- JCB
  -- Fixed busted behavior in tolist module.
  -- Re-implemented 'send' as a set of lower-level hooks instead of
     one giant mess.  Send also now uses 'tolist'.  (send_flagged will
     be updated to do so later.)  Upshot of this; one connection to 
     a mailserver if multiple users are on it, since it will sort the
     users by domain name. :)  Big plus for heavy-traffic lists with
     lots of people on, say, aol.com or another large provider.
  -- Rewrote moderator mode to use cookies, so two moderators don't
     accidentally 'approve' the same message.  Still works by forwarding
     to the repost address, it just has an additional 'modpost' line
     containing the cookie now. :)
  -- Removed a duplicate code problem that only appeared when using
     static modules.
  -- Changed default cookie expiration time from 3 hours to 24 hours.
     Let's be nice on the folks with slow mail spoolers. :)
  -- Made a fix to be friendly to outdated VM/VMS systems that didn't
     really speak 100% fluent SMTP, but instead sent '<blah>:<address>'
     for originator.
  -- ANOTHER fix for non-100% fluent SMTP servers.  Whee!

[03/29/1998] -- JLT
  -- Created a 'tolist' set of functionality to allow modules to add people
     to the send-to-list, remove people based on certain criteria and sort it.
     It's not currently *used* by the sending code, but will be once it's
     split up.  This will also enable us to do things like allow other modules
     to munge the to-list based on criteria of their own choosing and such-not

[03/29/1998] -- JCB
  -- Minor fix to 'base' module.
  -- Fix to top-level makefile to ensure all of WFLAGS field is passed
     to secondary makefiles.

[03/28/1998] -- JCB
  -- Split the core module up into a lot of little modules.  Finally.

[03/27/1998] -- JCB
  -- Removed Makefile.SunOS5.  Painful process of making it compile
     100% clean - even using dynamic modules! - on SunOS 5.  BE SURE,
     IF YOU RUN SOLARIS: /usr/ucblib _MUST_ be in your LD_LIBRARY_PATH.
     It doesn't seem to be by default on most Solaris systems.  It must
     also be in the LD_LIBRARY_PATH when Listar is called from sendmail...
  -- Various additions to compat.h to make it work under, you guessed
     it, SunOS 5.x...
  -- A lot of Makefile changes for...drumroll please...SunOS 5.x.
     (But I'm now 100% positive it'll work under SunOS 5, as long as
      your Solaris system isn't even more busted than mine.)
  -- Fixed minor bug in bouncer.
  -- Renamed 'listar.cfg', 'newlist.pl' and 'newlist.sh' to have .dist
     extensions in the default package.  This way, unpacking over an
     existing installation will not accidentally destroy your config
     files or customized newlist scripts. :)
  -- Because of the cookie fix, 0.106a released.  Ricardo should also
     be glad of the SunOS fixes. :)
  -- Version in CVS updated to 0.107a.
  -- After rethinking things a bit, modified a LOT of build settings
     to make a cleaner build under SunOS 4/5.  Still works in earlier
     build, but this way compiles cleaner for that system instead of
     trying to force it into ANSI compliance.
  

[03/27/1998] -- JLT
  -- Merged Makefile.SunOS5 back into the standard Makefile.

[03/25/1998] -- JCB
  -- Change to parse.c so that doing a 'reply' in a mailer for things like
     the appsub command should work.
  -- Fix to the 'commands' call so it would display non-admin commands
     in normal mode, and admin commands + normal in admin mode again.  Oops!
  -- Removed 'FULLBOUNCE' flag - it hasn't done anything since 0.103a when
     Bouncer was added, and we might as well get rid of it now. :)
  -- Added 'DIAGNOSTIC' flag; acts like VACATION as regards normal list
     traffic, but not flagged sends.  E.g. setting an admin user to be
     DIAGNOSTIC means they'll only get administrivia notes, not normal
     list traffic.  REPORTS and CCERRORS (from Bouncer) and any other
     such flags - including MODERATOR - will not be affected by it.

[03/23/1998] -- JCB
  -- Fixed a bug in cookie.c that broke admin-mode cookies.  Bleh.
     (Hey, they still worked for subscriber tickets, though!)

[03/19/1998] -- JCB
  -- SunOS is really evil.  I've now got a SunOS 5.5 makefile.
     To compile under SunOS 5.5 (don't use dynamic modules, they seem
     quirky), copy Makefile.SunOS5 over Makefile and compile. *sigh*

[03/18/1998] -- JCB
  -- Change to unmime.c to allow for Netscape/Outlook style forwarded
     messages, where the message is a MIME attachment of type
     message/rfc822.
  -- Painful port to SunOS.  Whose brilliant idea was it to have the
     SunOS vsprintf() return a pointer, anyway?  :P
     At any rate, to compile under SunOS 4.1.4 (the version under
     which Listar was ported), you'll probably have to remove the
     -Wall -Werror flags from the CFLAGS in all the Makefiles.  Other
     than that, it should compile clean the rest of the way.
  -- 0.105a released to get SunOS portability changes out for user.
  -- Version upped to 0.106a

[03/14/1998] -- JCB
  -- Fix in changed bouncer.  watches.newproc wasn't being unlinked,
     d'oh!

[03/12/1998] -- JLT
  -- Changed the variable and list code in such a way that variables should
     *NOT* be preserved across list context switches.  (IE, a variable in
     one config file that wasn't in another would have stayed set).
  -- In response to user comments, I will not be changing the way Listar
     reads and rewrites files.  It might get cleaned up in the future, but
     the per-command atomicity will be retained instead of a per-list or
     per-mail message atomicity which I proposed.  Removed this item from
     the todo list.
  -- Added a per-list variable of cc-lists.  This variable can be set to
     a colon (:) seperated list of other locally maintained listar lists
     which will get echos of all message posted to the initial list.  This
     is useful for instance for an announcment list and a talk list where
     everyone who is on the talk list is implicitly on the announce list.

[03/12/1998] -- JCB
  -- A few more incidences of index() changed to strchr().  Wow, there
     were a lot.

[03/11/1998] -- JCB
  -- Fixed bugs in moderated mode that cropped up when it was rewritten
     into internal.c; moderated-approved-by was typo'd in one place, and
     it was calling HOOK_SEND which duplicated all the message headers!
     (Since hook-send has already been called when something is poste
     to a mailing list, it's not needed.)
  -- Fixed bug in cookie.c where <queuefile>.changecookie never got
     deleted. :P

[03/09/1998] -- JLT
  -- Added a quickie way to make expiration of cookies configurable.  The
     variable is called 'cookie-expiration-time' and has a format like
     ' ZZ d XX h YY m' meaning ZZ days, XX hours and YY minutes.  Any of
     those can be skipped (although the number and the letter both need to
     be skipped).  Added a new variable get routine called get_seconds() which
     takes a variable string of the above form and returns the number of
     seconds.  This will be useful for other time-based things as well. The
     default time returned by get_seconds() is 0.  Default expiration time
     for cookies is still 3 hours if this variable is unset.
  -- Did a small bit of code cleanup and commenting, still more to do.
  -- Replaced a few uses of index/rindex with the posix-compliant
     strchr/strrchr (better portability)

[03/09/1998] -- JCB
  -- Fixed bug in sub.c that caused problems on oLa's requested subscribe
     mode.  Whups. :/
  -- Added open-auto mode for subscribe, on oLa's request.

[03/08/1998] -- JCB
  -- Fixed major bug in cookie and user code which caused it to never 
     be updated.
  -- Added 'subscribe <list> <address>' mode as requested by users, which
     causes a confirmation ticket to be sent to the person who's being
     subscribed (to prevent forcing a person to be subscribed when they
     don't want to).
  -- Version 0.104a released to fix above errors, version
     incremented to 0.105a

[03/08/1998] -- JLT
  -- Version 0.103a released
  -- Version incremented to 0.104a

[03/07/1998] -- JLT
  -- Added priority system to hooks.  Priorities are an unsigned int.  Thus
     the lowest priority is gaurenteed to be a priority of 0.  We might put
     further limits (or pre-define other priority classes later).  Hooks with
     the same priority (of the same type) can be triggered in an arbitrary
     order.
  -- Changed some of the file read/write code to fix a bug where certain
     files could be overwritten if two processes accessed them at once.

[03/07/1998] -- JCB
  -- The fileapi.c code has been cleaned up to work on Linux and BSD
     cleanly, minor additional changes to dynmod.c for same reason.
  -- Added confirm and closed subscription modes, which relies on the
     cookie code.

[03/06/1998] -- JCB
  -- Expanded unmime functionality to also handle multipart/alternative.
     (This is when a mailer sends multiple formats of a single message,
     such as a plaintext and HTML and RTF version all as separate MIME
     fragments.)  Listar will take the plaintext version and strip the
     others silently.  (Except for placing a note in the header.)
  -- Fixed a bug where unmime was often not returning correctly when
     in 'eatlines' mode.
  -- Added new module 'Bouncer', handles non-local bounce/error messages
     for a list.  To use bouncer on an existing list, add an alias to
     <list>-bounce that points to 'listar -bounce <list>', then add
     'send-as' (or change it) in the list config as
     '<list>-bounce@<site>'.  Viola, listar will track and deal with
     bounces, and report on them to you every so often (never more
     than once a day).  :)
  -- flagged_send duplicated and altered as flagged_send_textfile
     (compliment to send_textfile).
  -- Added 'REPORTS' and 'CCERRORS' flags to Bouncer, as per Mike
     Johnson's suggestion, along with many new config variables.
  -- Added new flag permissions, so some flags can be set by admins
     outside the admin wrapper (things like 'REPORTS' and 'CCERRORS').
     These flags could be forged by a mail-hacker, but do not affect
     the list as a whole.  Things like 'ADMIN' and 'MODERATOR' must still
     be set from in the security wrapper.
  -- Fixed a bug in flagged_send (and thus in flagged_send_textfile) which
     caused infinite looping if no users had the flag being keyed on.
  -- Altered Makefiles, dynmod.c, etc to allow Listar to compile under
     FreeBSD (and theoretically SunOS).

[03/05/1998] -- JLT
  -- Variable code modified to be a hash table instead of a straight linked
     list.  Should improve speed somewhat.
  -- Cleaned up the codes.c module so that it compiled with -Wall -Werr
  -- Separated hooks and commands.  All commands return either
     CMD_RESULT_CONTINUE (if processing of commands can continue) or
     CMD_RESULT_END (if processing should stop).
  -- Commands now take flags specifying where they can be found so there
     is only one add_command() for any command.

[03/05/1998] -- JCB
  -- Fixed a minor bug in SMTP code, final terminator wasn't necessarily
     being sent on a newline.  It took some hackery to achieve this case,
     but best to avoid it in the first place.
  -- Added 'unmime.c', which will take a mail message and turn all the
     MIME attachment gobbledegook into human-readable stuff.  Anything
     of type plain/text will be decoded (if encoded) and put in the
     message, while anything of a different content-type will be removed.
     (And a message placed there stating that it has been nuked.)
     Any file altered by unmime will have an X-Listar-MIME-Decode header.
     Unmime will not be called multiple times.  Unmime will be called from
     archive, and from digest, to ensure not having messed-up data.
     Unmiming on ANY post to a list is optional, however.
  -- Added 'humanize-mime' configuration variable to cause unmiming to be
     done on messages sent to a list.

[03/04/1998] -- JLT
  -- Two more places in the SMTP code weren't setting socket to -1 after
     close which could have resulted in multiple closes of a socket.  Not
     an ultra serious error depending on your OS, but needed fixing.
  -- Changed modules/listarchive/archive.c to use the CMD_HANDLER()
     macro to gaurentee that the function declaration is correct.

[03/04/1998] -- JCB
  -- Version 0.102a released
  -- Version increased to 0.103a

[03/04/1998] -- JCB
  -- Fixed major problem in admin handler.  Gotta love them typos.
  -- Brought CMD_RESULT_FAIL in line with new behavior in preparation
     for cleaning up result set in particular and API in general.
  -- Fixed a few things where SMTP error handling was not as it should be.
     (WHY were there returns BEFORE the error handler, JT?)
  -- Fixed a bug where some debug messages would never print.
  -- Fixed a nasty bug in the 'become' command.  Not a security problem,
     but made it impossible to ever return to your own identity after a
     'become'...
  -- Fixed a potentially horrific bug that caused total lockup when
     the SMTP client misguidedly closed stdin... *sigh*

[03/03/1998] -- JCB
  -- archive_mh and archive_mbox superceded by listarchive.

[03/01/1998] -- JLT
  -- Version 0.101a released
  -- Version increased to 0.102a

[03/01/1998] -- JLT
  -- Lots of assorted code cleanup.
  -- Modules can now register new command line switches and processing modes
  -- Old modes converted to this new model

[02/26/1998] -- JLT
  -- Fixed bug where userfile and cookie file could be trashed by multiple
     processes changing things at the same time.
  -- Fixed bug in SMTP code whereby the server would always be waiting the
     maximum timeout (due to the way that the ESMTP headers were being
     read).  Checking the RFC yielded a shortcut which told us the last
     response line so the read loop could be shortcircuited.
  -- Fixed another bug whereby we couldn't talk to a server that didn't
     support ESMTP.  While most servers do support it, the change to support
     the older SMTP protocal as well was simple and so was added.

[02/25/1998] -- JCB
  -- Fixed the SMTP timeout error!  Whee!  No more nasty errors like
     that, hopefully. :)

[02/24/1998] -- JLT
  -- Initial version of filearchiving module added.  File archive is
     configurable on a per list basis via the file-archive-dir config
     paramater.  This value of this variable is (currently) assumed to
     be relative to the lists/<listname> directory.
  -- 'files' command added similar to 'modules' or 'flags' to enable a
     user to discover the names of the configuration files which are
     registered.  This command is *NOT* an admin only command as merely
     knowing the name of the file provides no benefit to the user.
  -- Bug fix to the filearchive module to not allow '.' or '..'  or a
     leading '/' in the filepath of the 'get' command (otherwise list configs
     (and other system files) COULD be requested via this mechanism.
  -- Preliminary code for cookie expiration.  This code will expire all
     cookies more than 3 hours old at the end of each invocation of listar.
     It should be a configurable timeout per list (or global?)  However, that
     can be done in the future.

[02/23/1998] -- JCB
  -- Altered SMTP error handling to be a little more verbose and useful.
  -- Added Precedence: to mail headers.  Default is 'bulk', overridable
     by setting the desired value as 'precedence' in the list config.

[02/22/1998] -- JLT
  -- Code to clean up handling of command parameter passing.  Useful for
     some modules (like the file sending module)

[02/22/1998] -- JLT
  -- Version 0.100a released
  -- Version number incremented to 0.101a

[02/22/1998] -- JLT
  -- All uses of open_file() now have matching calls to close_file().
  -- user_open() function removed since all it was was a wrapper to
     open_file().  open_file() now used directly in it's stead.

[02/21/1998] -- JLT
  -- Added code to main core and modules to handle bounces from the local
     SMTP server correct (ie at all :).  Care must be taken to close whatever
     file is being used to garner error reports from the SMTP server before
     calling bounce_message() otherwise you will end up in a deadlock on the
     file locking code (I believe).  The errors file by default is the
     queuefile with .serr appened.  It will be unlinked if it exists at
     program termination.
  -- BIG fix in the fact that in case of an error, listar could be invoked
     recursively which could result in blockage on the log file (since the
     parent listar would have this locked).  The solution was to change the
     logfile handling so that each log line opened the logfile, printed the
     line and then released the log file.  This solves the problem

[02/20/1998] -- JCB
  -- Changed to put original sender in X-original-sender header field.

[02/19/1998] -- JLT
  -- Conditioned most debug output on get_bool("debug") which should be
     set per list (or globally if you really want the spam).  Useful for
     debugging problems in a production list
  -- Tracked down and fixed the problem with the send-as/sender.  The
     MAIL FROM: smtp header needed to be the same as sender in order for
     sendmail to handle the bouncing correctly.  From: header is still the
     actual sender.  Sender: Header is the send-as or list-owner header.
  -- Upped the version to 0.100a

[02/18/1998] -- JLT
  -- Cleaned up the variable handling code slightly, pulling it out into
     a seperate C file.  Added additional checked accessor functions for
     bool values (true if variables value is not null and is either the
     string 'true', 'yes', 'on' or some number other than 0 (case
     insensitive);  string values (return "" if variable isn't set);
     and int values (return atio(string) or 0 if not set).  get_var() is
     still useful to provide an existance check for a variable, but it
     shouldn't be needed in most cases.
    
[02/17/1998] -- JCB
  -- 'send-as' behavior changed.  'send-as' sets the SMTP 'Sender' field,
     while the originator remains as the real sender.  This differs from
     the majordomo method, but is in line with the old Bitnet LISTSERV
     method.  Listar owes far more conceptually to LISTSERV than to
     majordomo anyway. ;)

[02/16/1998] -- JCB
  -- Added 'send-as' configuration variable.  If set, instead of
     sending with an authenticated sender of the original sender,
     will send with this address instead.  (E.g. will cause
     bounced messages to go here.)  Otherwise, bounces will
     still go to original sender and the FULLBOUNCE flag will be
     used.  ('fullbounce' configuration variable also added to
     apply to 'send-as' mode.)

[02/15/1998] -- JLT
  -- Makefiles can now build dynamic and non-dynamic code, selectable by
     a parameter in the toplevel makefile
  -- Small bug with duplicate code for send_textfile function cleaned up.

[02/15/1998] -- JCB
  -- Minor fix to unsubscribe command, aesthetic only.

[02/13/1998] -- JLT
  -- Small changes to the makefiles to support recursive building of all
     defined modules.  This is work necessary prior to enabling a non-dynamic
     build mode which builds each module as a library and then links the
     executable against all the defined modules.  Eventually we should
     generate a configure script with gnu autoconf or something similar as
     well.  However, that's not of great necessity, just merely useful

[02/13/1998] -- JCB
  -- Added 'MODERATOR' flag and associated functionality.
  -- Two new operating modes, -admins and -moderators.  Will forward
     the message to subscribers with ADMIN or MODERATOR flag,
     respectively.
  -- newlist.pl altered for this new data.
  -- Fixed a crash bug in subscribe/unsubscribe commands.
  -- Found problem where 'who' command didn't release lock!  Ack!
     Fixed problem.

[02/10/1998] -- JCB
  -- Minor change to io.c to allow clean compile under BeOS and 
     a few other non-Linux systems.

[02/05/1998] -- JCB
  -- MAJOR changes to modules, reworked way status is returned,
     reworked all command return results...
  -- Fixed fatal error in fileapi.c
  -- All results from a query occur in one result set now.

[02/04/1998] -- JLT
  -- Added a file open/file close API that includes locking semantics.
     All locks will block when they are created if they need to, so all
     file access should now be correctly serialized.
  -- Reversed the orders of entries in this file.

[01/28/1998] -- JCB
  -- MAJOR fix to Dynamic modules, to make sure they get freed after
     a run. :/

[01/22/1998] -- JCB
  -- Minor fix to archive_mh Makefile.
  -- Addition of archive_mbox (uses 'mbox-archive-path' configuration
     setting) to create Berkeley mbox-style archives.
  -- Changes so main project and all modules compile -Wall -Werror
     under glibc.
  -- 'lists' command will only display lists with 'advertise' set to
     'yes'.

[01/15/1998] -- JCB
  -- Minor cleanup in module Makefiles.

[01/14/1998] -- JCB
  -- Core and archive functions moved into dynamic modules.
  -- MH Archive rewritten to fix incrementing even on reject of post.
  -- Module registry added, modules can add themselves to list.  'modules'
     command added to display list of installed modules.
  -- Fix to parse.c to fix conflict with CMD_HOOKAFTER and moderated
     lists.
  -- Two fixes to archive_mh after initial checkin, both minor.

[01/12/1998] -- JLT
  -- Preliminary support added for Dynamic Link Libraries/Shared Libraries

[01/12/1998] -- JCB
  -- Various small bugfixes.
  -- CHANGELOG created, since JT's going to start helping me with this.
