LIST OF CHANGES

Version 3.096          ( 1 Jan 2026)
    Added an option to prevent STARTTLS or STLS from certain hosts.

Version 3.095          (16 Dec 2025)
    Added log message after state 4 filtering.
    Fixed: incorrect handling of nuchunking list.
    Change to TransLog module to avoid deadlock on exit.
    List of signature algorithms removed from log.
    Reduced heap size to 80 MB.

Version 3.094          (08 Dec 2025)
    Minor non-critical tweaks.
    Fixed: faulty timing calculation in Hosts.OnDomainBlacklist.
    Fixed: crash in watchdog thread.

Version 3.093          (18 Nov 2025)
    Closes input stream on connection lost.
    Added: a Setup option to disable BDAT from some domains.
    Fixed logging error: session type M* was being reported as S*

Version 3.092          ( 9 Nov 2025)
    Fiexed bug in session ID list.

Version 3.09           (19 Oct 2025)
    Removed some tracing code from module Domains.
    Added ERROR_INTERRUPT check to TaskControl.Obtain
    On out of memory, logs the size of the request.
    Heap size increased to 128 MB.
    "Serialise filters" is now compulaory, not an option.
    Serialise DKIM operations.

Version 3.08           (18 Sep 2025)
    Extra log output for the "fragment length error" case.
    Fixed test for limit on fragment size.

Version 3.07           (10 Aug 2025)
    Disabled dump code that was intended only for testing.
    Fixed: list corruption when deleting a saved session ID.
    Increased limit on saved sessions to 100.
    Revised TransLog module to eliminate the concept of "log context".
    Extra error checks on TLS input.

Version 3.06           ( 6 Aug 2025)
    Made the certificate and private key common
        to all domains.
    More graceful failure if padding error during decryption.
    Now ignoring unknown or illegal extensions when
        processing a ServerHello.
    Fixed a sign error in TLSrecv.
    Log files modified to show what sort of session it was.
        Still have to work on SMTPOUT.LOG
    Increased heap size to 24 MB.
    Fixed Setup bug: couldn't handle port > 32767.
    Fix for ClientHello faulty extensions.
    Experimenting with truncated HMAC option.
    Fixed: response to "empty server_name" error.
    More careful check for extension length error.
    Fixed: unwanted * in file name passed to filter.
    Fixed: for outgoing mail, the * in log file
        prefix should apply only to the current connection.
    Added error check to Copy procedure.
    Private key for all domains now kept in main memory.
    Transaction log now shows thread number for each session.
    Fixed: should not give welcome message when handshaking failed.
    In list of saved session IDs, let most commonly used float to the top.
    On exit, we save all session ID data, and restore it on restart.
    In GetFragment, added check for valid record type.
    Added checks for failed output (which had many flow-on effects).
    Delete saved session ID if handshaking fails.

Version 3.04004           (10 May 2025)
    Fixed MAC bug.
    Released as test version.

Version 3.04003           ( 4 May 2025)
    Fixed bug in Setup: certificate chain stored in wrong place.

Version 3.04002           ( 1 May 2025)
    Fixed bug in Setup: private key not read correctly.

Version 3.04001           ( 1 May 2025)
    Fixed location of private key in INI files.

Version 3.04              (27 Apr 2025)
    Testing TLS for POP3.

Version 3.03              (24 Feb 2025)
    Changes to DKIM code to detect illegal hash algorithm.
    Fixed: in SMTPData I was treating DKIMSignEnable and
        DKIMCheckEnable as global variables.  They
        should be domain properties.

Version 3.02              ( 5 Sep 2024)
    Minor change to "domain is local" check.
    "Relay everything" mode not allowed until you have
         deleted all domains and users.

Version 3.01              (11 Aug 2024)
    Cleaned up handling of comments in hostlists.
    Some revisions in the "Editing a list of host names"
        part of the manual.

Version 3.0               ( 9 Aug 2024)
    Improved the SPF "exists" test.

Version 2.9-0001          (12 May 2024)
    Fixed: crash if domain private key not found.
    Policy clarification: if a valid private key can't
       be found, no DKIM signature is generated.
    Added a "DKIM defaults" page to Setup.
    Released to mailing list.

Version 2.9           (04 May 2024)
    Time delay before 2nd attempt to query nameserver.
    Weasel will now not insert a DKIM signature if one
        is already present.
    Fixed: SPF parser was looking for the wrong kind of
        bracket as a macro delimiter.
    DKIM parameters are now specified per domain.

Version 2.89          (03 Apr 2024)
    Now using shared memory to transfer statistics to Setup.
    Minor changes to DKIM.

Version 2.88          (15 Mar 2024)
    When adding a new user, Setup will delete any '@' it finds
        in the username, and any following characters.
    If the "Local" list for a domain is empty in multidomain
        mode, Setup adds local addresses to the list.
    Fixed: arrival rate calculation was writing to the screen.
    Statistics collection is now disabled by default.
    Proof-of-concept version of password encryption included.

Version 2.87-0011     (11 Feb 2024)
    Touching stack before calling the SPF check.
    Released to weasel-list.

Version 2.87          (21 Dec 2023)
    Allowed for long SPF strings.

Version 2.86          (19 Dec 2023)
    Fixed: fatal error when DKIM not enabled.

Version 2.85          (08 Dec 2023)
    Complete re-work of DKIM code.
    DKIM checking is temporarily disabled in this version,
       but DKIM signature generation is working.

Version 2.849         (29 Jul 2023)
    Fixed: error in the check for whether a Date:
        header was missing.
    Day of week now included in mail headers.

Version 2.848         (24 Jul 2023)
    Fixed: on a fresh install, MailRoot directory was
        not being created.
    Some changes to the DKIM page in Setup,
        and to the DKIM page of the Weasel manual.
    Major changes to keygen.exe. The old version was
        generating keys that are suitable for SSH,
        but not for DKIM.
    Added a new event semaphore \SEM32\WEASEL\HAMMERRESET.
        A signal on this semaphore resets the hammer list.
        (Documented in TechData.INF.)

Version 2.847         (07 Jun 2023)
    Reversion: files with dates in September 2022 or earlier
        will still use the old method of UID calculation.

Version 2.846         (27 May 2023)
    On POP fetch, log will show relative file name, not
        absolute as in previous versions. This is a result of
        a new method of calculating UID introduced in July
        2021, applying only to files dated July 2022 or later.
        We now consider the changeover period to be over.
    New "lock mailbox" strategy: we only keep it locked long
        enough to capture the data from a directory listing.

Version 2.845         (26 May 2023)
    Log "mailbox is locked" even if not otherwise logging POP sessions.

Version 2.844         (19 May 2023)
    Fixed: crash when SPF string contains illegal IP address.
    DKIM theoretically complete, but needs testing.

Version 2.84          (28 Mar 2023)
    Added remote port number to log for outbound mail.
    Added some lost-connection checking for outbound mail.

Version 2.83          (02 Feb 2023)
    Fixed: override filter sometimes not being invoked.
    New option: allow POP operations to be logged for
        some but not all users.

Version 2.8           (26 Nov 2022)
    Happy birthday, Charles Schulz.
    New option to run a user's override filter even if mail
      is forwarded to another place and there is no local copy.

Version 2.79          (17 Feb 2022)
    Addresses 127.*.*.* are now exempt from the hammer check.

Version 2.78          (03 Sep 2021)
    Allow for message size > 4GB and mailbox size > 4GB.

Version 2.77          (07 Aug 2021)
    Fixed: incorrect AUTH PLAIN format while relaying.
    Setup removes leading and trailing spaces from passwords.
    New method of calculating UID introduced, to take effect
       with the first mail fetched after September 2022.

Version 2.76          (11 Apr 2021)
    Put unrecognised command in quotation marks in log.
    Updated the CRAM-MD5 code.
    Fixed a timing problem when elapsed time is negative.
    Changed the rules for partial POP logging.

Version 2.75          (12 Feb 2021)
    Check for negative elapsed time in module Hosts.
    Hostlists may now contain comments.
    Setup map files added to distribution.

Version 2.74          ( 6 May 2020)
    Extra log message for the case of an
       unexpected program termination.
    On a password error, the client is penalised
        only if there is a new login attempt in less than
        three seconds. (This case arises with the SMTP AUTH
        command, or the POP3 commands APOP, PASS, AUTH.)
        The penalty still increases on
        each successive login attempt.
    On correct authentication, any records of failed
        authentication are cleared.
    Fixed: crash when converting time zone west of Greenwich.
    Fixed: valid passwords were being rejected.

Version 2.73          ( 1 Mar 2020)
    When deleting a domain, Setup now deletes both
        DOMAIN.INI and DOMAIN.TNI if they are present.
    Fixed: deleting the original domain was failing.
    Added documentation for WEASEL.FMT

Version 2.72          ( 3 Jan 2020)
    Internal changes to move most INI/TNI decisions
        to module WINI.
    Fixed: hang on exit when INI or TNI file missing.
    Now adds Date header to an incoming message if it
        was missing.
    VIOSetup removed from the distribution.

Version 2.71          ( 1 Dec 2019)
    Now do the "noexistent domain" check on the
        MAIL FROM argument rather than the HELO/EHLO
        argument.
    Exempted numeric address argument
        from the "nonexistent domain" check.
    Fixed: missing ';' in Authentication-Results header.

Version 2.7           (30 Sep 2019)
    Several modifications to Setup to ensure that it
        does not create a WEASEL.INI when in TNI mode.
    New option to reject incoming mail when the HELO
        or EHLO command specifies a nonexistent domain.

Version 2.6            ( 6 Sep 2019)
    This version incorporates changes made in
        test versions built since version 2.58.
    This file renamed from changes.doc to changes.txt.
    Fresh build to use INIDATA.DLL
    Fixed: error in handling aliases in VIOSetup.
    Sources updated to use the new convention that
      choice of INI/TNI mode is based on the extension
      of the INI/TNI filename rather than on a separate
      parameter.
    Fixed: fault in watchdog operations that could
      cause an attempt to dispose of an object
      twice.

Version 2.58           (17 Jun 2019)
   Tweaks to logging code in module Domains.  Also
      removed some obsolete debugging code.
   Changed the way a CRAM-MD5 timestamp is generated.
   Modified semaphore implementation to remove a
      critical race risk.

Version 2.57           ( 8 Jun 2019)
   Improved handling of some event semaphores.
   Slight change to Watchdog module to handle race when
      timeout happens just as the watchdog is kicked.

Version 2.56           (17 May 2019)
   Fixed: non-delivery messages now have a Return-Path
      header line.
   Improved error message "Cannot bind to server port".
   Clarified, in Setup and in the manual, the meaning of
     the "bind address" in Options page 3.
   Fixed: miscalculation of number of recipients in the
     retry list. This would not have had any practical
     effect except in the case of a very long retry queue.
   Fixed: a critical race condition that could cause a
      thread to wait forever for an event that has already
      happened. This could, for example, cause Weasel to
      stop sending outbound mail even if there are
      messages queued to be send.

Version 2.55           (27 Mar 2019)
   If Setup invoked with T or I parameter, this affects
      not only the decision as to whether to use
      WEASEL.INI or WEASEL.TNI in future, it also
      affects the choice of SETUP.INI vs SETUP.TNI.
   Endmail.exe removed from distribution.
   Fixed: miscalculation (in some cases) of bytes left
      in the buffer used for CHUNKING output.
   Next phase of retiring obsolete features: if an entry
      in a hostlist starts with '.', it is converted to
      a wildcard form, and entries of the form a.b.c.d/N
      are assumed to be in CIDR format regardless of the
      presence of the keyword CIDR.

Version 2.54           (28 Feb 2019)
   Policy change: non-routeable addresses are exempt
       from the check for rDNS failure.
   Renewed warning: in host lists, support for address
      ranges of the form a.b.c.d/N, without the CIDR
      prefix, will soon be dropped. You should convert
      all such entries to the CIDR format.
   The SCAVENGE utility will also disappear soon.

Version 2.53           (10 Feb 2019)
   Fixed: the check for RDNS failure was not being enabled.
   Change to SBuffers module to deal with overflow exception.

Version 2.52           ( 6 Dec 2018)
   Fixed: INI corruption caused by error in checking
      for duplicate hosts.
   First attempt at displaying an "outbound SMTP" count.

Version 2.51           ( 4 Dec 2018)
   Count of entries added to Setup pages that show
      lists of hosts.

Version 2.5            (18 Nov 2018)
   Added option to reject mail that fails a reverse DNS lookup.
      (See page "Options 1" of the Setup notebook.)
   Changed the rules about the decision whether to use INI
      or TNI format (see manual).

Version 2.49           (18 Nov 2018)
   Nonrouteable addresses are no longer checked by RBL.
   Minor change to manual: wildcard entries are allowed
      on the whitelist page of Setup.
   In all host lists, duplicate entries are removed when
      you exit Setup.
   Fixed: confusion between POP and SMTP when decoding the
      ServerEnabled flags.

Version 2.48d          (13 Sep 2018)
   Changed watchdog code to avoid a critical race.
   Minor change to message about reloading INI data.
   Stricter interpretation of option to not log POP sessions.

Version 2.48c          (17 Aug 2018)
   Minor correction to blacklist code.
   Fixed: error in interpreting the "Enable" in INI file.
   Released to mailing list.

Version 2.48a          (16 Aug 2018)
   Added option to use domain blacklist checkers.

Version 2.48           (10 Aug 2018)
   Fixed: obscure bug in BDAT processing.
   Fixed: stack overflow on nameserver lookup.
   Fixed: source code corruption in POPCommands.mod.
   "No chunking" hosts removed from Setup. Chunking is
      now supported whenever it is supported at the
      other end of a connection. You can still
      specify a maximum outgoing chunk size in Setup.

Version 2.47           (23 Jul 2018)
   Not released.

Version 2.46           (21 Jul 2018)
   Fixed: error response when POP RETR fails.
   New: allow for CNAME nameserver records when doing
      an MX lookup.
   This version proved to be unusable.

Version 2.45           (29 May 2018)
   Fixed: "Delete domain" operation was deleting two domains.
   Added domain count to the "Domains" Setup page.
   ETRN (ESMTP command) added. It has the side effect that
      jobs for the specified domain have their "retry"
      status reset, i.e. it allows immediate delivery of
      those retry jobs.
   Added option to disable some of the initialisation logging.
   Setup made more visible in the manual.
   Redefinition of the sequence [POP3..IMAP].  This might affect
      some of the "max users" and "timeout" values in Setup.
   Option to suppress POP sessions in transaction log now puts
      minimal information into transaction log.

Version 2.44          (14 Jan 2018)
   New approach to watchdog, using fewer threads.
   Internal change: test for detached process moved
      to module TaskControl.
   Top screen line now lists number of users instead
      of "online" status.
   Added NoChunkingHost category, and a "Chunking"
      page in Setup.

Version 2.43          (18 Nov 2017)
   Moved password attack protection into a separate module.
   Slightly tougher rules for repeated password guessing.
   Fixed minor bug in the POP log.
   Added a limited number of retries (about 5 seconds)
      before reporting "mailbox is locked".

Version 2.42          (30 Aug 2017)
   Minor change to manual.
   Fixed Setup bug that would cause Weasel to
      incorrectly assume that \MPTN\ETC\MAIL was the
      mailroot directory even if it wasn't.
   Slight change to shutdown processing.
   Allowed for a nonstandard port in via: addresses.
   Modified looping test to allow for multiple
      mail servers on different ports, same machine.

Version 2.41          (17 Aug 2017)
   Added CheckRelayRules.cmd and Sample_RELAYRULES.TXT
      to the distribution.
   New option on the "Relay" page of Setup to route
      outgoing mail using a "relay rules" file.

Version 2.4           (24 Jul 2017)
   Rules about whether to use INI or TNI extended to the
      case of remote setup.

Version 2.39          (20 Jul 2017)
   Alterations to allow TNI files to be used as default
      without having to use a -T parameter.
   New option to support this on the first Setup tab.
   Several consequential changes to the manual.
   New program ChooseTNI added to the distribution.

Version 2.38          (14 Jul 2017)
   Experimental check on time taken by blacklist checker.
      Disable a blacklist checker for an hour if
      it takes more than a minute to do the check.
   More careful guard against SMTP timeouts.
   For incoming mail, added a failure response for
      BDAT chunk size > 5 MiB.
   For "chunk size too large" and similar errors, we
      delay the error response until the chunk has been
      received (and ignored).
   Fixed a conflict between Weasel and imapd.

Version 2.37          (11 May 2017)
   Fixed: some of the checks for a valid sender
      address were being skipped.
   Added check for "out of heap memory" while
      receiving chunked data.
   Fixed: if sending mail failed at the DATA or BDAT
      stage, the sender got the wrong error message.
   Fixed: miscalculation of how much chunked data to
      send when there are dot-stuffed lines.
   Fixed: memory leak when chunked data send failed.

Version 2.36          (27 Apr 2017)
   Recoded some of the CHUNKING operations to be
      consistent with dot-stuffing.

Version 2.35          (17 Apr 2017)
   Fixed some minor logging errors.
   More accurate message size in SMTP log.
   Implemented the CHUNKING option (RFC 3030) to give
      faster data transfer for large message files, if
      the other server supports it.

Version 2.34          ( 8 Apr 2017)
   Fixed faulty POP fetch.
   Cleaned up some log file messages.

Version 2.33          ( 5 Apr 2017)
   EHLO response now includes 8BITMIME.
   Fixed: two files were missing from source distribution.
   Fixed: disabling SPF did not "stick" in Setup until
      Setup had been run several times.
   Added note to manual about situations where you should
      not enable SPF.
   Added SPF results to transaction log.
   Added direction indicator to transaction log entries.
   Change to retry strategy: we will not retry if the
      error code is 552 (exceeded storage limit).

Version 2.32          ( 6 Mar 2017)
   SMTP output transactions are now included in the transaction log.

Version 2.31          (13 Jan 2017)
   Added check to reject mail with a missing From: header.
   Changed the rules about when we will retry, or try a
      relay host, for an outbound message that failed.
   Fixed: weasel.xqs was missing from distribution.

Version 2.3           (14 Dec 2016)
   Skip SPF check for whitelisted host.
   Fixed "ptr" bug in SPF check.
   Extra "banned host" check in HELO and EHLO commands.
   Slight revision of how the MAIL FROM address is
      checked for acceptability.
   More generous rules about what parameters may be
      changed without restarting Weasel.
   Added option to suppress POP sessions in transaction log.
   Fixed: maximum message size was not being updated.
   Added option to disable the SPF check.
   Removed postmastercheck.cmd from distribution, put it
      on web site instead.
   Miscellaneous changes to the manual.
   Altered EHLO response for stricter compliance with standard.

Version 2.29          (27 Oct 2016)
   Added log message to show username on AUTH.
   Fixed: session could time out during postmaster check.
   Added an SMTP whitelist.
   Added CIDR option to host lists
      (banned, whitelisted, etc.)
   Added an "edit" button to all host list pages.
   Preliminary version of SPF check included. For now
      this does not reject mail, it only puts a
      result in the Authentication-Results message header.

Version 2.28          (05 Aug 2016)
   Moved IPF files to source distribution, and
       added weasel.bmp.
   Added a separate manual for VIOSetup.

Version 2.27          (29 May 2016)
   Fixed: crash when a mailbox contains more than
      2^32 bytes (about 4 GB) of messages.
   Implemented message size limit (RFC 1870).

Version 2.26          (31 Jan 2016)
   Fixed: dangling pointer while creating lists of
      "separate filter" users.

Version 2.25          (25 Jan 2016)
   Increased size of ArgString used to call a filter,
      to allow for the worst case filenames.
   Fixed: memory leak when stage 0 filter rejects an
      SMTP connection.

Version 2.24          (08 Dec 2015)
   Fixed: incorrect handling of greylisting.

Version 2.23          (07 Dec 2015)
   Fixed: Weasel was ignoring postmaster check
      option in Setup.
   Added option to bind outgoing mail to
      specific IP address.
   Fixed: parsing of an envelope address when
      the MAIL command has an AUTH parameter.

Version 2.22          (03 Dec 2015)
   Improvements to the postmastercheck algorithm.
   Updated Setup.exe and the manual.
   The postmaster check can now be disabled using Setup.

Version 2.2           (28 Nov 2015)
   Fixed errors in implementation of postmaster check.
   Skip postmaster check for local domains.
   Elimination of a few false positives in
      postmaster check.

Version 2.1           (12 Nov 2015)
   Fixed an error in makefolder.cmd.
   Fixed: conflict when "forward", "keep copy" and
      "separate filter" all activated together.
   Added the "X-PostmasterCheck" header and
      associated postmastercheck.cmd filter.

Version 2.01          (19 Sep 2014)
   Fixed: SMTP authorisation failing when  "all users
      may use SMTP AUTH" was not set for this domain.
   Removed some obsolete registration checks.

Version 2.0           (10 Sep 2014)
   Fixed: wrong domain was being written to POP.LOG
   Major overhaul of the manual.
   Now released as open-source with GPL licence.

Version 1.8293        (21 Jun 2014)
   Fixed: incorrect specification of heap size in
      project file.
   Heap size set to approx 24 MB.
   Released to mailing list.
Version 1.8292        (19 Apr 2014)
   Fixed a possible critical race when turning
      logging to disk off or on.
   Fixed: crash when running out of memory trying
      to create an SBuffer.
   Released to mailing list.

Version 1.8291        (19 Apr 2014)
   Now recognises OS/2 limit of 256 threads/process.
   When you first switch to multidomain mode, the
      domain name defaults to "Please rename this to
      your real domain name", rather than the
      "yourdomain.com.net" that was apparently
      confusing some people.
   Included client IP address in POP log.
   Fixed: filter options not being read correctly
      from TNI file.
   Released to mailing list.

Version 1.829         (17 Dec 2013)
   Added Setup page and option to set the
      number of bytes to be included in a
      rejection letter.
   Released to mailing list.

Version 1.828         (15 Dec 2013)
   Gradually increasing file handles as needed.
   Working on alternative rejection letter.
   Released to mailing list.

Version 1.827         (6 Oct 2013)
   Changed Setup tab label "Local" to "Local addresses".
   Added check for out of memory when allocating
       an SBuffer.
   Increased maximum file handles from 100 to 500.
   The SHUTDOWN, FINISHED, and UPDATED semaphore names
       now include the name of the executable, to
       make it possible to distinguish between two
       running versions of the program.
   Released to mailing list.

Version 1.826         (3 Oct 2013)
   Policy change: in the event of a clash between
      a domain's "Local" list and our own list of
      addresses obtained from SIOCGIFCONF data,
      we ignore the IP address in the "Local" list
      without throwing away the textual name.
   Minor relabelling of the "alias" Setup tab
      (English only, not yet translated), and the
      heading in the "Local" tab (translated,
      but not by native speakers) in the multidomain
      case.
   Released to mailing list.

Version 1.825         (22 Sep 2013)
   Smaller default values for the timeouts. This
      will not affect anyone who already has
      timeout values configured.
   For outbound mail, new log message showing
      result of MX lookup.

Version 1.824         (21 Jul 2013)
   Disabled the logging of heap allocation operations.
   Domain name now included in POP.LOG entries.
   Setup page 1 now includes an estimated thread count.
   Added a Cancel button to the "change to single
      domain mode" operation.
   Released to mailing list.

Version 1.823         (13 Jan 2013)
   Changed method of generating filenames in user
      directories.  Now using a timestamp, in effect.
      This will reduce frequency of writes to
      INI or TNI file.
   Removed some obsolete "POP fetch latest" code.

Version 1.822         (4 Jan 2013)
   Fixed: error in program shutdown sequencing.
   Added map and symbol files to distribution.
   This version released to mailing list.

Version 1.821         (1 Jan 2013)
   Fixed: crash during program shutdown, if extra
      logging was used.
   Fixed: delivery failures when a separate override
      filter was used for some recipients.
   Altered way in which exceptq finds out the
      program name and version.
   Minor fix: include domain name of recipient in the
      "Attempting to send to" log message.
   This version released to mailing list.

Version 1.82          (19 Dec 2012)
   Fixed: poor choice of default root directory on a
      new installation.
   Fixed: a semaphore leak where some event
      semaphores were not being properly closed.
   The logging of amount of heap memory used is now
      suppressed unless "More detailed logging" is
      specified in Setup.
   Some alterations to exceptq support.
   Removed some debugging code and debug log messages.
   Default value of "when to go online" changed to
      "always". This will not affect anyone who has
      already set a value for that option.
   Added option to change the limit on number of
      recipients per outbound mail item.
   New log message when INI data are reloaded.

Version 1.81          (8 Sep 2012)
   Fixed: Weasel was not unhiding the files in the
      'forward' directory on startup.
   LoadINI and DumpINI are no longer included in the Weasel
      distribution.  You have to download GenINI separately.
      (Luckily, GenINI does not often get updated.)
   The "fetch last" POP option is now obsolete.  POP clients
      now see all of the messages on the server, rather
      than the first or last 512 messages.
   Fixed: an uninitialised pointer that was causing a
      crash on some POP fetches.
   Added log message that identifies the domain that an
      SMTP outbound thread is trying to reach.
   Fixed a stack overflow on USER command.
   Some extra log messages for SMTP outbound.
   Removed the obsolete "POP fetch starts with most recent"
      checkbox from the Setup program.
   New policy: 5-second delay added before closing the
      connection from a blacklisted client.
   Setup now accepts new command-line parameters.  See
      the manual for details.
   Policy change to accommodate servers that do
      greylisting: when sending out mail, we don't try
      the relay backup host until the fifth retry.
   Removed some obsolete code, cleaned up the POP data
      structures.
   Change to the interval between retries.
   For SMTP outbound mail, authentication is not used
      unless there is a relay host.  The Setup notebook
      and manual have been updated to make this clearer.
   Fixed: when a backup relay is configured, the relay
      was not always used, so some items remained
      undeliverable.
   Added: extra log line to show whether SMTP authentication
      for outgoing mail was successful.
   Removed code for the obsolete "POPFetchLatest"
      option, an option that allowed fetching mail in
      a nonstandard order.
   Some minor changes to logging.
   Fixed: crash on USER command when TNI file used.
   Fixed: the next message number was not being updated
      in INI or TNI file.
   Fixed: in TNI mode, a zero-length WEASEL.INI was
      being created if it didn't already exist.
   Startup operations more carefully sequenced to take
      into account task interdependencies.
   Fixed: crash if INI or TNI file was missing.
   New approach to dynamic control of the number of
      Send_NN tasks.
   Fixed: the wrong number of Send_NN tasks were
      being started.
   Change: you can now change the number of these tasks
      (in Setup) without having to restart Weasel.
   Build level information added to weasel.exe. (So
      you can now find out its version number by
      running "bldlevel weasel.exe".)
   Fixed: the transaction log was not being cleanly closed on exit.
   Policy change: transaction log now updated every minute
      instead of once every 15 minutes.
   Fixed: error when trying to write a number in too
      small a field size.
   Fixed: crash caused by missing CRLF in input line
      or input line that is longer than the standards allow.
   Fixed: we accept neither mail nor logins for an
      account that has been marked inactive.
   New protection against dictionary attack: when there
      are too many password errors, the client IP
      address is blocked for 10 seconds.
   Misc changes to reduce stack usage.
   The "status" thread that was putting three counts to
      the log has been removed. It was created to track
      down a memory leak, but it never managed to
      find one.
   New script "ban.cmd" added to tools directory on web site.
      (But not to zip file.)
   Converted many "value" string parameters to "var".
   Corrected a spelling error in looking up "OurHostName"
        in the INI or TNI file.
   Fixed: incorrect handling of option to forward mail
      for a local user to another address.
   Minor update to kernel stack shifting code.
   Fixed: Setup was crashing if SETUP.INI did not exist.
   Updated Spanish language file.
   Fixed small memory leak in TNI handling.
   Added log message to show how much memory has been
      allocated for TNI data (but only if extra logging
      is specified and we are in TNI mode).
   Added a "-i" parameter to explicitly turn off
      TNI mode.
   Fixed: Setup crash in TNI mode if MailRoot changed.
   Added file WEASEL.FMT, for more readable layout of
      TNI files if DumpINI is used.
   Added check for accessibility of DOMAIN.INI
      when clearing a recipient list.
   Fixed: after dropping a new font on a Setup
      notebook, the notebook sometimes reverted to
      the old font on exit.
   For consistency, Setup now saves its own options in
      Setup.TNI if running in TNI mode. Note that this
      implies that you can have two independent sets
      of fonts and window positions depending on whether
      you start Setup in INI or TNI mode.
   Added logging of heap usage, as a check for
      memory leaks.
   Removed OldDumpINI and OldLoadINI from the distribution.
      These programs are now officially obsolete.
   Added exceptq handling.
   Fixed: Two semaphore leaks.

Version 1.80         (26 Oct 2009)
   The 'X' parameter is no longer supported.  (Use the
      equivalent Setup option instead.)
   Fixed: some INI data was being read from WEASEL.INI
      even when the 'T' option was specified.
   Top line of screen now shows whether INI or TNI used.
   Fixed a memory leak that occurred when POP fetch
      was picking up most recent 512 messages.
   New command-line option 'F' to set working
      directory to be equal to program directory.
   Removed obsolete debugging code that was
      causing APOP to crash sometimes.

Version 1.79          (13 Jul 2009)
   Fixed: screen "offline" message was not updated
      correctly when we were not logging to screen.
   The namelist passed to a filter now includes a
      line terminator (carriage return and line feed)
      at the end of the last name.
   POP3 processing modified to use less memory.
   Weasel now supports TNI mode.
   Setup now supports TNI mode.  The support for remote
      setup with a TNI file is also in place, but will
      not become effective until a new version of
      INIRemote is released.  (Remote setup still
      works for INI files, just not for TNI files.)
   Minor policy change for convenience: when you switch
      to or from multidomain mode, the Setup notebook
      automatically turns to the page that
      would let you reverse that change, if desired.
   Old versions of DumpINI and LoadINI included in the
      tools directory as OldDumpINI.exe and OldLoadINI.exe.
      The new versions are packaged as a GenINI zip file.
   New versions of LoadINI and DumpINI use a new
      format for the TNI file; in fact they are
      identical to the LoadINI and DumpINI that are
      now distributed in the GenINI release.
   Rexx files mloadini.cmd and mdumpini.cmd added to the
      tools directory, to provide conversion of the
      DOMAIN.INI (DOMAIN.TNI) files as well as
      conversion of WEASEL.INI (WEASEL.TNI).
   Extra log information for incoming SMTP.
   Reduced the amount of memory used for storing domain information.
   Fixed a memory leak in the module tracking domain info.
   Added log messages to check for related leaks.
   Fixed: in TNI mode, the file DOMAIN.TNI was not
      being created when a new domain was created.
   Cleaner transition to and from multidomain mode, to
      minimise potential confusion about the domain
      files and directories.
   Inactive users now marked with a '*' in Setup user page.
   Policy change: when looking up all alternative names
      belonging to a domain, we don't (except in the
      single-domain case) do reverse DNS lookup on
      numeric addresses.
   Policy announcement: the command-line argument 'X'
      will soon be phased out.
   Fixed a potential memory corruption during failed
      POP login attempt.
   Extra option on "Local" page for strict domain name
      checking, in the multidomain case only.
   Added an option to fetch the last 512
      messages on a POP fetch, instead of the first 512.
   Minor efficiency improvement in blacklist checking.
   The deprecated POP2 command LAST is no longer supported.
   Design changes to reduce the number of writes to the
       INI file.
   Extra checks for corruption of (UName,VName,NextName)
       entries in the INI file.
   LoadINI and DumpINI replaced by the current GenINI release.
   Fixed: crash on mail to nonexistent user.
   Now passes the session ID to filters via
       the namefile file name.
   Fixed: Setup was sometimes losing the name of the
       stage 4 filter.
   Syslog option may now log to another machine.
   Fixed: documentation error related to filter namefile.
   Added a colon after "Weasel" in syslog messages.

Version 1.78         (11 Sep 2008)
   Setup now remembers the last page that was open.
   Fixed: crash when all logging was turned off.
   Fixed: "out of memory" problem on POP3 login when
      user has too many messages on server.
   Fixed: response to SMTP EHLO was advertising
      AUTH methods that were disabled.
   Fixed: memory leak when delivering local mail.
   Slowed down dictionary attacks that use AUTH commands.
   Minor changes to the way the top two lines of the
      screen are written.
   Fixed: username missing from POP log when user
      logged in with AUTH command.
   Minor change to default replies used when a filter
      rejects mail.
   Restrictions on which users may use SMTP AUTH
      (as specified in the user page in Setup)
   Alterations to "too many bad passwords" POP3 check:
      - can specify the number of tries before disconnecting;
      - 3-second delay comes after, not before error reply;
      - can disable this test completely, if desired.
   Added the Spanish language file.
   Minor change to user Setup dialogue.
   To fix an "out of memory" problem, limited the number
      of messages visible to a POP client to 512.

Version 1.77        (15 Jul 2007)
   Fixed: failure to update user count when a client
      is banned or blacklisted.
   Fixed the "100% CPU" problem when a client
      connects but sends no command.
   "Extra logging" checkbox in Setup replaces X parameter.
   Improved protection against denial-of-service attack.
   Fixed: problem with authenticating outgoing mail.
   Fixed: logging via a pipe was failing.
   Now allowing for up to 8 blacklist servers.
   Added comment in the manual to point out that the
     Rexx variable RC can be checked to see whether
     Weasel shut down normally or crashed.
   Minor change to INIData.Close.
   Updated transaction logging to improve the case of
     multiple threads writing to disk.
   Fixed: memory corruption in INI file operations.

Version 1.76      (15 Mar 2006)
   Allowed for longer names on registration page.
   Fixed: result of 16 from stage 0 filter was
            being ignored.
   Added new POP3 commands CAPA and AUTH.
   Fixed a bug in CRAM-MD5 implementation.

Version 1.75      (8 Feb 2006)
   Internal changes to buffering and logging.
   Rule change: INI file is taken from working directory,
      instead of from program directory.
   Added German language file.
   This version not released because of a CRAM-MD5 bug.

Version 1.74      (18 May 2005)
   Provision for a fourth service: a "message submission
      agent" service which is like SMTP but which is
      intended for messages initially entering the mail
      system, as distinct from those which are already
      in the system and are being relayed from one
      mail server to another. Very few mail clients
      understand this distinction, so you probably don't
      need to enable this service unless you are sure
      you have a need for it.
   Restored the "Synch" operation that was needed to
      work around a bug in Microsoft clients.

Version 1.73      (4 April 2005)
   Internal changes to MD5 encryption, in preparation
      for future implementation of TSL.
   Minor internal changes to simplify the future
      integration of IMAP.
   Setup notebook changes to include IMAP settings.

Version 1.72      (7 February 2005)
   Internal changes to transaction logging.
   Remove spaces after '<' in a RCPT address.
   Fixed bug: crash if port > 32767 in remote Setup.
   Increased heap limit to 16MB.

Version 1.71      (3 September 2004)
   Implemented the obsolete (and deprecated) POP2
      command LAST, for the benefit of users such as
      Yahoo who are still using obsolete POP clients.
   Filenames for incoming mail now chosen in a way that
      forces the sort order to be the same as the
      order of arrival, even when Weasel is not shut
      down properly.
   LoadINI and DumpINI now load/dump all domains in
      the multidomain case, rather than requiring each
      domain to be handled manually.
   Changed transaction logging module to use less memory.
   Allow changes to the relay option for outgoing mail
      (including relay host name and authentication data)
      to be made without restarting the server.
   Changes to message list construction on POP3 login
      to eliminate a faulty memory reference and to
      improve efficiency.
   Added option to use a fixed hostname to report as our
      own hostname.
   Fixed: occasional crash on UID calculation.
   Fixed: Setup problem in multidomain mode, where the
      default domain name kept being re-created.
   Option to change the length of time we continue to
      attempt to send outgoing mail.
   Setup notebook changed to new style.
   Allow user%domain as another acceptable POP login
      username.

Version 1.70    (21 May 2004)

   Support for different languages in Setup. This version
      is distributed with English, French, and Dutch
      language files, but it is easy to add more.
   Setup notebooks now remember fonts dropped on them.
   Added new user options: inactive account, forward mail
      with or without local copy.
   Policy change: if a filter returns a "reject this mail"
      decision, we send the reply to the client, and then
      send a "421 closing connection" reply, and then we
      forcibly cut off the client.  This is to protect us
      against the increasingly aggressive approach of
      junk mail software.
   Policy change: rDNS lookup on numeric IP addresses is not
      done unless and until necessary.
   Policy change: the loopback address [127.0.0.1] is now
      automatically a "Trusted" address that is allowed to
      send relay mail.
   More flexible rules for the syntax of an IP address range.
   Added some delays to discourage dictionary searches:
     - 2 seconds after POP password error (note that there
          is already a limit of 3 attempts to log in)
     - 10 seconds before SMTP "unknown user" reply
     - 10 seconds after an SMTP RSET command
   Indented continuation lines in screen log.
   Added initial server response to log.
   Extra "End of session" log message to make log analysis
      easier.
   Added "pipe" to transaction logging options.
   "Override filter" option now works even when there are
      multiple recipients, possibly with different filters
      for each recipient.
   Fixed: adjust Return-Path header after calling a filter.
   Fixed Setup bug: option to log SMTP users was not
      being remembered.
   Permit a delivery attempt via backup server if original
      server gives 550 or 553 response to RCPT command.
   Fixed: failure to try backup relay if the initial attempt
      failed on the MAIL FROM command.
   Added an option to relay everything, for the case where this
      server has no local users and is simply acting as a
      front end for another mail server.
   Now can change all logging options without restarting Weasel.
   Made the log file names configurable.
   Added a new reply code 16 for filters, meaning "accept this
      message and skip future filtering steps".
   Setup changed to fix a "lost users" bug that appeared when
      remote setup was used in multidomain mode.  Also minor
      other changes to Setup.

Version 1.68    (8 Oct 2003)
   New limitation: POP3 users will see only the first 1024 messages
      in their mailbox.  (But they will see the next 1024 after
      the first group has been fetched and deleted.)  This change
      has been made necessary as the result of the current campaign
      by junk mailers to crash servers that support anti-junk
      measures.
   More permissive rules about which Setup options can be changed
      without restarting the server.  See WEASEL.INF for the details.
   Fixed: handling of the "no valid users" case when mail is
      relayed.
   Fixed: damaged header line in the case where the Return-Path
      header is more than one line long.
   Fixed: undesirable looping behaviour when a secondary relay
      keeps re-attempting to send mail that has already been
      rejected by the primary server.
   Scavenge utility removed from the distribution.
   Added the filter names and "serialise filters" option to the
      list of things that can be changed without restarting.
   Corrected misleading "no relay path to destination" that is
      sometimes given when a different message would be
      more appropriate.

Version 1.67
   Fixed Setup bug (couldn't turn off SMTP authentication).
   On POP fetch, add an extra CRLF for mail that violates the
      SMTP standard by ending lines with LF rather than CRLF.
      (Only old Unix software does this, as far as I know, but
      apparently there are still people who use old Unix
      software.  In addition, we have to allow for spammers
      and Microsoft, both of whom tend to introduce new
      standards violations without prior warning.)
   Expanded the set of Setup parameters alterable without
      having to restart the server.
   More careful definition, in WEASEL.INF, of which Setup
      options take effect immediately, and which ones require
      the server to be restarted.
   Rule change: unregistered users may use multidomain mode,
      but only the first domain will be supported.  (The
      ultimate aim is to migrate everyone to multidomain mode.)
   Updated VIOSetup to support some (but not yet all) of the
      new configuration options supported by Setup.

Version 1.66
   Major change to filtering system.  Filters may now be
      called at up to five different times during an incoming
      SMTP session.  If there is only one local recipient,
      there is also an option to replace the default final
      filter by a user-specific filter, or to skip the
      filtering for some users.  As a side-effect, the
      order of parameters passed to the filter has changed,
      therefore existing filters need to be modified.
   Fixed a bug that would cause Weasel to fail if SMTP was
      disabled.  Since this bug has been present for many
      versions, and has never been reported, this tends to
      suggest that nobody ever uses Weasel in conjunction
      with another SMTP server.
   Added a message to the log file to say "Delivered" or
      "Failed to deliver" for an SMTP outgoing mail item,
      to make it easier for log analysis tools to distinguish
      between success and failure.
   Made the responses to spammers a bit more consistent with
      RFC2821.  (With some reluctance.  I still think that
      RFC2821 makes too many concessions to tolerating spammers.)
   Moved endmail.exe and scavenge.exe to the tools
      subdirectory, on the grounds that most people won't
      need them.
   Fixed: crash on invalid AUTH command.
   Added an error message for the "No command supplied" case.
      (An empty SMTP command should never occur, but the
      spamming software is getting sloppier in terms of
      ignoring the standards.)
   Changed the upper limit on number of threads for outbound
      mail to 64.
   Changed the default for "log outgoing mail" to FALSE.
   Fixed: (rare) SETUP crash when working on aliases.
   Changes in internal library implementations.
   Fixed an error in CRAM-MD5 authentication.
   Increased the stack size per thread to 64 KiB.

Version 1.65
   This (buggy) version withdrawn immediately after release.

Version 1.64
   Fixed error in verifying a POP login.
   You can now specify how many threads will handle
     outbound mail (range 1..99).
   Added option of a log file (SMTPOUT.LOG) for outgoing mail.
   Updated LoadINI and DumpINI to handle options that have
     been added in recent changes.
   Fixed: recipient list passed to a filter could contain
     remote addresses resulting from an alias expansion.
   Clear all 'LOCK.!!!' files at startup.  (Previously this was
      being done only for the single-domain case.)

Version 1.63
   Don't automatically create a 'postmaster' account if there
      is an alias, possibly wild, that will handle 'postmaster' mail.
   Fixed: crash when loading complicated set of aliases, a
      crash that appears to be caused by an OS/2 Prf API bug.
   Increased the "listen" queue length to 5.
   Removed the "routing loop?" from the "no relay path to
      destination" error message, because there are too many
      cases where this is a temporary loss of connection
      rather than a routing loop.
   For outgoing mail, increased the timeout on the initial
      connection attempt from 75 to 150 seconds.  This is to
      accommodate the deteriorating network performance now that
      so many ISPs are replacing their fast Unix mail servers by
      slow Windows servers.

Version 1.62
   Identifies EXPN as a supported ESMTP command, even though
      we will respond only with "that information is confidential".
   Avoid creating a redundant postmaster directory in
      multidomain mode.
   Implemented AUTH command for both incoming and outgoing SMTP,
      with methods PLAIN, LOGIN, CRAM-MD5.
   Removed the "accept mail for unknown users" option, and added
      conversion code in Setup and VIOSetup to add a wildcard alias
      if that option had been set.
   Added a 'Demote' option to the Alias page in Setup.
   For outgoing mail that has to be retried, we now wait until
      after several attempts before sending the sender a
      "delivery has been delayed" notification.  (The previous
      strategy was to send that notification after the second
      attempt, which was probably too soon.)

Version 1.61
   New interpretation of alias expansion: if there is no '@'
      in an address, we assume the current domain.
   Fixed: some "delivery failure" messages were using
      [127.0.0.1] as the name of the sending host.
   Avoid sending a bounce message to the address <>.
   Clearer indication that registration code has been accepted.

Version 1.60
   General tidying up to permit a non-beta release.
   First official release of the multidomain feature.

Version 1.59
   Permit wildcards in alias names.
   Added test for NIL descriptor in TaskControl.SuspendMe,
     and increased heap limit to 8MB.
   Made the software again runnable on older 16-bit versions
     of the tcp/ip stack, as well as on the newer versions.

Version 1.58
   Fixed a bug in alias expansion that was causing
     redundant files to be created in the MailRoot directory.
   In single-domain case only, switched back to something
     similar to the older method for identifying a POP user.
   On incoming mail, long lines wrapped if they go over
     1000 characters.  (This is helpful for e-mail clients
     that get confused by junk mail that violates the
     SMTP standard.)
   More care that our hostname matches the IP address in
     things like HELO parameter, timestamps, etc.

Version 1.57
   Added option to say whether password should be used to
      work out which POP3 user is logging in, in the case
      where the same username occurs in more than one domain.
   Added a check for duplicates in "Add all local IP addresses".
   Changed the "unknown user" error code from 553 to 550.
   Added test for unknown local user during alias expansion.
   Removed the "via" message from the log in the case of an
      unsuccessful delivery attempt.
   Documentation of multidomain mode added.
   Timed demo now enabled until the end of January 2003.

Version 1.56
   Fixed error: mail could be duplicated if a message was
      received just as we were going on-line.
   Added a "too many hops" check on incoming mail.
   Allow optional parameters for DumpINI and LoadINI.
   Fixed initialisation failure when a hostlist contained
      a numeric range of IP addresses.
   Fixed error: data being lost when users moved to a
      different domain.
   Better handling of the case where a filter changes or
      deletes the "Return-Path" header line.
   This version released as a beta, not as a public release.

Version 1.55
   Fixed an error in alias expansion.
   Includes time-limited demo of multidomain mode, untested.
   This version released as a beta, not as a public release.

Version 1.54
   Added option to auto-detect dial-up connection.
   Major internal changes in hostlist handling in preparation for
      the switch to multidomain support.
   Added an error check to the "create thread" operation.
   This version released as a beta, not as a public release.

Version 1.53
   Removed detailed counts for outgoing mail.
   Yet another change to shutdown handling.

Version 1.52
   Slight change to shutdown handling.  Also added a
      FINISHED event semaphore, to confirm shutdown complete.

Version 1.51
   Don't reset the RECEIVED semaphore before posting, for
      better Major Major response.
   Slight change to shutdown thread, to avoid need for
      typing Ctrl/C twice.

Version 1.50

   Added a global semaphore to force shutdown.
   The namelist for a filter no longer reveals the
      expansion of aliases.
   Made the initial 'checking' messages more visible.
   Modified the 'for' part of the 'Received:' header line,
      to be an accurate copy of the RCPT TO: address.
   Fixed bug where mail queued before we went online was
      sent twice.

Version 1.40

   Altered the queue throttling algorithm for outgoing
      mail.
   Increased limit on POP username size to 255.
   Allow filters to return a message to be sent to the
      client in the case of rejection by filter.
   Refined test for when an outgoing mail is not worth
      retrying.
   Corrections to the way the number of jobs in progress
      is calculated.
   In POP command DELE, added check for deleting a message
      that has already been deleted.
   Changes to make it harder for an attacker to guess
      passwords, e.g. we don't reject a POP login attempt
      when an incorrect username is received, we wait
      until after the password is supplied.
   Fixed a memory leak in MD5 calculation (affects UIDL).
   Corrected bug introduced in version 1.30 related to huge
      file support. This version should again work with
      pre-FP15 versions of Warp.
   Domain included in local addresses passed to a filter.
      (This corrects a regression made in version 1.30)
   Setup: added count of users.

Version 1.30
   Increased number of worker threads that send mail to 16.
   Radical change to the way the outgoing mail is sorted.
      This should improve mailing list performance.
   Optional serialisation of filter operations, to compensate
      for Rexx scripts that can't handle more than one thread
      at a time.
   For relay host, use direct lookup rather than MX lookup.
   Extra guard against memory overflow in high-traffic
      conditions.
   Mail no longer sent through backup relay for recipients
      where the original server has rejected this user.
   New way of specifying blacklist sites, as a result of the
      way those sites have changed.
   In Setup and VIOSetup, added check for a user name that
      duplicates an alias, or vice versa.
   VIOSetup now supports most things that Setup does.
   Fixed bug: misleading error message if no valid recipients.
   Fixed memory leak in UIDL command.

Version 1.20
   Speed improvement for POP3 fetch of big message.
   New rule: dot-stuffed lines remain dot-stuffed as long
      as they are in the Weasel mail directories (including
      the 'forward' directory).  Previous versions removed
      the extra dot, then reinserted it when a POP user
      did a fetch.  This will require a change to any
      software that deposits mail directly into the
      Weasel directories.  This change implies that anyone
      who upgrades to the new version of Weasel should
      also upgrade to the new versions of
           - popget
           - qmail
           - Major Major
           - EchoNews
      if they're using those packages.
   Added a check for faulty nameserver response.
   Fixed error in Setup: blacklist options weren't always
      being stored correctly.
   Fixed obscure error in handling a range of IP addresses.
   Fixed error in the Setup 'Promote' option.
   New way of identifying a thread, to get around possible
      bug in run-time system.

Version 1.10
   Added more anti-spam options in the "Options" setup page.
   Option of extra detail in transaction log.
   Replaced all RndFile operations by API calls.
   Error reply returned for "Mailbox already locked" for
     better conformance with POP3 standard.  This reverses
     a change made in version 0.4.
   Check for case of retry scheduled for negative time in
      future.

Version 1.00
   Fixed: was not working properly if started from inetd.
   More detailed logging of outbound mail.
   New 'techdata' manual added to the distribution.
   Format of TNI file changed significantly.
   Better buffering of socket I/O.
   New rule for POP-before-SMTP authentication: once it has
      obtained this authorisation, an SMTP client keeps
      it for multiple operations, as long as the
      authorisation time doesn't expire between operations.
   Changed computation of a message UID so that it also
      depends on file date and time.
   Permit old-fashioned path specification in the
      SMTP commands MAIL and RCPT.
   Fixed: crash when POP user supplied an empty username.

Version 0.99
   Removed reliance on tcp_h_errno(), which appears to
      be giving faulty results.
   Removed a case sensitivity in user names in PMSetup.
   Renamed PMSetup.exe to Setup.exe.

Version 0.98
   Renamed Setup.exe to VIOsetup.exe.
   Include domain name for local users in recipient file
      used by filters.
   Direct delivery of local mail even if "use relay host
      always" option is in force.
   External program can now force check of "forward"
      directory by posting an event flag.  (Feature
      added to make Major Major output faster.)  In
      addition Weasel now posts an event flag on incoming
      mail.
   Added check that ensures that the SMTP commands for
      outgoing mail use angle brackets around the addresses.

Version 0.97
   Fixed error: multiple copies of mail being sent out.
   MIME encapsulation for failure message.

Version 0.96
   Periodic re-scan of "forward" directory to see whether
     mail has been placed there by other programs.
   Endmail modified so that it no longer uses the $i
     parameter, for compatibility with newer versions of
     sendmail.  (This won't affect most Weasel users.
     It's relevant only if you use a Weasel/sendmail
     combination.)
   PMSetup changed so that "public" is the initial default
     for an alias.
   Faster shutdown when dealing with hard-to-deliver mail.
   We now add Message-ID header if it's missing.
   Adaptive timeout for outgoing SMTP connection.
   In SMTPData.AcceptOneLine, made provision for a Nul
     appearing as an incoming data character.
   Fixed error: was running out of memory when there were
     more than 800 mails waiting to be sent.

Version 0.95
   Fixed a list corruption problem in POP-before-SMTP
      authentication.
   Removed the source files and some of the tools from
      the main distribution.  (Tools are now available
      for separate download - they rarely change from one
      version to another.)

Version 0.94
   Added option for POP-before-SMTP authentication.
   Filter strategy changed back to using DosExecPgm (since
      the other solution was preventing filters from being
      run when Weasel was run detached).
   Fixed an error in the Setup "promote host" operation.
   Added server replies to detailed transaction log.
   Added option to specify a nonstandard relay port.
   Added "Real name" and "comments" fields to user data
      in PMSetup.

Version 0.93
   Added option to use Realtime Blackhole List.
   "Bounce" messages to local users are now delivered without
      having to go on-line.
   Fixed PMSetup bug (SMTP timeout)
   Filter strategy changed - now using DosStartSession which
      appears to be more reliable.
   Transaction log now shows which host we sent mail through.
   Fixed a PMSetup bug - was failing to write back a host list
      after all items were deleted.
   Added option to check whether the MAIL FROM address is on a
      blacklisted host.
   Added option to use a relay host as a backup.

Version 0.92
   Added option to accept mail for unknown users.
   Added -G option to PMSetup.
   Check whether outbound mail is looping.
   Minor change to POPGET - doesn't create new directories.
   Simplified module TaskControl.
   Fixed some memory leaks in the kernel.
   Filters now inherit the environment, including PATH.
   Reduced the "going online" delay to 4 seconds.

Version 0.91
   Now using version 2.32 of the compiler.  This should fix
     a "thread leak" problem.
   Fixed error in filtering: non-local recipients were
     missing from the list of recipients.
   Added SEND.CMD to the Tools collection.
   Repaired error in POPGET.CMD.
   More accurate handling of timeout.
   Fixed socket leak on "failed to connect" condition.
   Added a "for" item on the timestamp, but only in the case
     of a single recipient.
   Allow for longer responses from nameserver.

Version 0.90
   PMSetup in remote mode now creates user directories if
     necessary (requires an upgrade to version 0.4 of INIServe).
   Fixed a problem in endmail.
   SMTP log uses IP address if hostname cannot be found.
   Tightened up a check for pathological cases; this seems to
     solve a problem where hard-to-reach destinations led to
     a crash.

Version 0.88
   Added SMTP and POP log files.
   Changed way we determine our own host address.
   Minor enhancements to PMSetup.
   Allow a numeric range in a list of host names.
   Minor change to screen output format.
   Fixed a Setup bug that was causing a spurious error message
     in the log, and another that was causing the "relay dest"
     list to be incorrectly stored.

Version 0.87
   New system for wildcard matching on host names.
   Optional filter for incoming mail.
   Relay mail allowed to specified destinations.
   Setup updated to allow for new options.
   Outgoing mail is held until a file 'ONLINE' exists.
   Complete rewrite of PMSetup.

Version 0.86
   Fixed a problem with wildcard matching.

Version 0.85
   Timeout on remote host when sending mail.
   Now running 4 threads for outbound mail.
   Minor fix to reading mailroot from INI file.
   Major change to the way "forward" mail is stored.
   Scavenge.exe modified to convert any unsent mail to the new format.
   Setup creates mailroot directory if it didn't exist.
   Obsolete threads killed a little faster.
   Fixed a problem where a session would time out when
     transferring a large file.
   PMSetup added to distribution.

Version 0.83, 0.84
   (Private test versions, never released.)

Version 0.82
   Fixed a memory allocation error in LoadINI.
   Minor change in the host name-matching, which might help
     with a reported error of wildcards not working.
   Fixed a problem of spurious characters being inserted in
     incoming mail that contains byte-stuffing at beginning
     of line.
   Minor correction to the nameserver lookup code, for the
     case where there is no MX entry for the destination domain.
   REXX script to migrate OS2PopS user data.

Version 0.81
   Fixed an error that caused the software to lose track of
     some outgoing messages.
   Scavenge utility added to the distribution.

Version 0.8
   Change in MX check - swap byte order of IP address in case
     where MX record not found.  (And software tidied up to
     guard against other cases of confusion between network
     byte order and host byte order.)
   Changed the re-try strategy, to improve the chances of
     successful delivery of mail to hard-to-reach destinations.
   Increased the number of retries, to a total of 26 attempts
     over four days.

Version 0.7
   Redundant nameserver lookup removed (should speed up
     delivery slightly for outgoing mail).
   Fixed an error in APOP authentication calculation.
   SMTP connection dropped if client sends too many
     undecipherable commands.
   Changed the "user not local" response code from 251 to
     250, to work around a Netscape bug.
   Source code added to distribution.

Version 0.6
   More detailed checks for a valid sequence of SMTP commands.
   More careful checking for uniqueness of generated file
     names for received mail.
   Added a Return-Path: line to mail header on final delivery.
   In host name lists, the single character "." now
     matches anything.
   New option to send all outgoing mail via a relay.
   Added SMTP commands VRFY, EXPN, EHLO.
   Added POP commands APOP, UIDL.
   Added sender IP address to the "Received:" line on
     incoming mail.

Version 0.5
   Retries of outgoing mail (for 4 days) implemented.
   Fixed an error in alias expansion.
   Fixed a problem of sockets not being released.

Version 0.4
   New feature: aliases.
   Local host names: we now accept "mymachine" as a synonym
     for "mymachine.localdomain".
   If POP mailbox is locked, extra clients can still log in,
     but they'll see an empty mailbox.
   Added check for duplicate local recipients.
   Fixed a bug that caused the SMTP server to use an alias
     instead of the official host name.
   Local usernames are now case-insensitive; but we don't alter
     the case of remote usernames, in case the remote server
     uses case sensitivity.

Version 0.3
   Mail relaying permitted for trusted hosts.  (This is the
     biggest change - I had to add a major subsystem for
     dealing with outgoing mail.)
   Locked mailboxes automatically unlocked at startup.
   New "wildcard" syntax for domain names in Setup.
   General overhaul of everything.
   Version numbering system changed.

Version 0.02
   Added check for missing user directory.
   Fixed a logging error: transaction log was going to the wrong
     file, and causing the INI file to explode in size.
   Inetd option implemented (but not yet tested).
   Allowing a list of possible names for the current host.
   Check for banned clients.

Version 0.01
   First beta-test release.

