LIST OF CHANGES

Version 3.7002      (20 Dec 2025)
    Completed the automatic sizin in Admin notebook.

Version 3.7001      (11 Dec 2025)
    In Admin notebook, automatic sizing of labels for
        checkboxes and radio boxes. (Currently only for
        Page 1 of the notebook.)

Version 3.7         ( 8 Jan 2025)
    Fixed: thread crash if a log message occurs while list
        properties are being loaded from INI file.
    Minor changes to DKIM implementation.

Version 3.6         (19 Feb 2023)
    Fixed: In ListChecker, stopped TimeToSleep going negative.
    Added: we now delete any existing DKIM-Signature header,
        and (if DKIM enabled) generate a new one.

Version 3.5         (29 Oct 2023)
    Added a "recirculate" option for outgoing mail.

Version 3.4         (23 Jan 2023)
    Added check for list trying to subscribe to itself.
    Checks in Admin.exe for conflict between owners or
        members with name of list.
    If looping is detected in mail to the MajorMajor
        administrator, an error is logged and the
        offending mail file is saved.

Version 3.3         (12 Jan 2023)
    Fixed: failure when input line length > 1023.

Version 3.2         (19 Nov 2020)
    Re-release to update two scripts in "Tools".

Version 3.1         (12 Nov 2020)
    Fixed: when mail from a non-subscriber was
        rejected, a blank message was still being sent out.
    Fixed: in the "Weasel on same machine" case, mail root
        was being set incorrectly if Major Major used TNI
        mode and Weasel used INI mode, or vice versa.
    Major Major version identified in transaction log, and also
        via an X-Mailer header in list messages.

Version 3.0         (14 Dec 2019)
    Fixed: continuation lines in a Content-Disposition
        header were being deleted.
    MIME-Version header added if necessary.
    New feature: leader and trailer files may optionally
        start with MIME header fields.
    Tidied up the code dealing with MIME parts.

Version 2.9         ( 9 Nov 2019)
    Fixed (I hope): 30-minute delay after Ctrl/C.
    New feature: leader and trailer text is now
        correctly inserted before and after html
        text.  "Remove attachments" keeps both
        parts of a multipart/alternative message,
        but deletes what comes afterwards.

Version 2.8         (15 Feb 2019)
    Moved Major.ipf to the "sources" directory.
    Moved Major.inf to the "doc" directory.
    This file renamed from changes.doc to changes.txt.
    Fresh build to use INIDATA.DLL
    Improved handling of global event semaphores.
    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.

Version 2.7         (14 Feb 2019)
   Now ignores bounce messages from postmaster.
   Updated scripts listmembers.cmd and subscribe.cmd.

Version 2.6         (18 Dec 2018)
   Screen output now makes it clearer whether Major.INI
      or MAJOR.TNI is being used.
   Updated rules for choosing between INI and TNI format.
   Fixed: Admin was deleting the log file name when
      logging to disk was disabled.
   Admin notebook now opens on the page that was open
      when Admin was last closed.

Version 2.5         (25 Oct 2017)
   Fixed: missing blank line after header in the case
      where attachments are not removed.
   New rule: if only one of Major.INI and Major.TNI is
      present, then that is the one that both Admin
      and Major will use. Otherwise, Major.INI will be
      used.
   Fixed: my handling of an ERROR_INTERRUPT result from
      a DosWaitEventSem call was preventing Ctrl/C from
      terminating the program. After careful consideration
      of all the available advice, and some experimentation,
      I have decided that the best way to handle this
      "error", in the context of DosWaitEventSem, is to
      ignore it.

Version 2.4         (24 Aug 2017)
   Remove BATV tag from sender address if present.

Version 2.3         (14 Jun 2017)
   Added manual section on multiple domains.
   Added a check for missing From: header.
   Fixed: for a message with non-deleted attachments,
      the trailer was being inserted at the wrong place.
   Fixed: Admin was not storing the "kill attachments"
      option for a new list, although the option was
      correctly handled after the first change.

Version 2.2         (21 May 2015)
   Fixed: sender information overwritten when
      attachments deleted.
   Fixed: message corruption when attachments removed.
   DumpINI and LoadINI removed from distribution, with
      the manual updated to point to GenINI.

Version 2.1         (13 May 2015)
   Fixed: some continuation lines in header were
      being deleted.
   Public release.

Version 2.0         ( 5 May 2015)
   Re-released with GNU GPL licence.
   Fixed: messages not being sent to list members.

Version 1.68        (29 Jun 2014)
   Now recognises OS/2 limit of 256 threads/process.
   Added an option for DMARC compatibility, and
      revised the rules for updating headers.
   New option to set a limit of number of
      recipients per mail message.

Version 1.671       (12 Dec 2013)
   Change in macro meaning: the %S macro expands to
      the sender e-mail address, as before, but in
      the special case of a subscription or
      unsubscription confirmation message it
      expands to the address of the member who is
      being subscribed or unsubscribed.

Version 1.67        (4 Jan 2013)
   Incorporates low-level code changes that were
      introduced by Weasel updates.
   Will use exceptq if it is installed.

Version 1.66        (10 Nov 2012)
   Fixed: incorrect parsing of boundary code when
      it was not in quotation marks in the
      Content-Type header line.

Version 1.65        (24 May 2012)
   Changed an http: link in DefaultPlainTextFile.txt
      which was pointing to a page that no longer
      existed.
   A "log detail" checkbox has been added to the
      Basic page of Admin, as a future replacement
      for the "X" parameter for extra logging.
   Improved startup speed.
   Added: logging of RCPT response when sending mail.
   This version released to mailing list.

Version 1.64        (13 Mar 2012)
   Fixed: the specification of the log file name
      was being ignored.
   New macro: %A means the e-mail address of the
      list adminstrator. The "how to unsubscribe"
      messages have been changed for all supported
      languages.
   Fixed: if ADMIN.INI did not exist, the Admin
      program crashed.
   Fixed: excessively long time delay in launching
      Admin.EXE if MAJOR.INI does not exist.

Version 1.63        (9 Jan 2011)
   Admin now has new L (for local) and R (for remote)
      command-line parameters.
   Fixed: "From" header was being deleted when a
      message contained attachments.
   Copyright notice updated.
   Fixed: Mailroot calculation, in the "Weasel on
      this machine" case, was not correctly handling
      all combinations of fixed/relative directory
      specifications, and was not correctly handling
      ".." in a directory specification.
   All file open operations recoded to take account
      of a change in my "FileOps" library module.
   Build level information added to executables.
   Minor change in syntax of zip file names.

Version 1.60        (13 Aug 2009)
   Major.INI is now assumed to be in the current working
      directory rather than the program directory.
   Provision for an optional filter on mail to the
      administrator, and also for silent rejection of
      mail containing no valid command.
   Fixed: count of failed deliveries in log.
   Warning: some of the language files have entries
      generated by Babelfish, which is known to have
      produced some very hilarious errors.
   Fixed: "OK" label was missing on one button in Admin.
   Internal changes to transaction logging.
   Added the Admin file for Spanish.
   Updated the Admin file for Dutch.
   Policy change: canned messages such as the welcome
      message are sent in the user's language, not the
      list language.
   If the first command received is a "lang" command, the
      specified language will be used for the Subject:
      in the reply header.
   Fixed LoadINI to handle an admin filter, also
      fixed a problem in handling byte variables.
   Improved LoadINI and DumpINI for better handling of
      special-case strings (e.g. strings containing
      quotation marks).
   Added check to see whether a supposed command is
      actually a leading substring of a non-command.
   Fixed an obsolete http:// link in DefaultHelp.txt
      (all languages)
   Added the Norwegian subdirectory of "Canned", which
      somehow had been omitted from earlier distributions.
   Fixed: a couple of the options in the "Options 2"
      page were forgetting their values.
   Policy change: Major.exe now re-reads all of the INI
      parameters when Admin.exe exits.
   List members are now in the "Members" section of
      the INI file rather than in the "names" section.
      The migration is automatic - the two sections will
      be merged the first time Major.exe is run.
   Fixed: if you chose to use the default messages for a
      list, some of them were not being used.
   Policy change: if there is a Weasel mail server on
      the same machine but the "Weasel on this machine"
      option is not active, then a check for new mail
      is not made each time new mail arrives.
   If a message file is missing, this will show up
      in the transaction log.
   Log now records whether admin mail has been ignored.
   Fixed bugs in Subscribe.cmd and ListMembers.cmd
   Minor changes to documentation.
   Added error message to transaction log if server is
      Weasel and mail root directory does not exist.
   Fixed: in some situations, the option "Discard error
      messages" was being ignored.
   Better handling of commands with trailing spaces.
   For a moderated list, the "From:" header line will
      now identify the sender rather than the moderator.
   Now have the option of using TNI files in place
      of INI files.
   You may now specify the name (including directory, if
      desired) of the log file.
   You may now specify the directory holding the archives.
   Fixed: bug that was creating a "From: From:" header.

Version 1.59         (7 February 2005)
   Fixed bug: crash if port > 32767 in remote Admin.
   Fixed bug: digests were being sent out with wrong
      sender address.
   Fixed: special case where all list users are digest users.
   In Admin, member count always displayed on "Members" page.
   Delete any "Disposition-notification-to" header line.
   Fixed bug: the "Require confirmation" option was not
      being saved correctly.

Version 1.58         (6 September 2004)
   Eliminate all "Return-Receipt-To" and "Read-Receipt-To"
      header lines from mail sent to a list.
   Option to let administrator login name be different
      from its account name.
   Made 'who', 'get', and 'index' commands legal for
      list owners even if they're not members.
   Added Italian language support.
   Option to notifying list owners on 'unsubscribe'.
   List owners may confirm an 'unsubscribe' to handle the
      case of unsubscribing a non-responding address.
   Login name may be different from list name.
   Minor internal rearrangements.
   Option to suppress the RFC 2369 mail headers.
   Changed Admin notebook to use new-style tabs.
   Policy change: if an 'unsubscribe' command comes from a
      list owner and the list requires confirmations, the
      confirmation request is sent to the list owner
      rather than to the member being unsubscribed.
   "X-For-Moderation: listname" header added to messages
      sent to a list owner for moderation.

Version 1.57        (29 Jan 2004)
   New feature: multilingual support.
   Added option to require a confirmation for a subscribe/unsubscribe.
   Added option to save refused mail for later analysis.
   Reply to commands now uses a genuine MAIL FROM: address
      rather than an empty address.
   Changed the default notebook font to 8.Helv (but this will
      not affect existing users, unless they delete the fonts
      stored in Admin.INI)
   Fixed: some changes were being ignored when editing a
      list with Admin.exe.
   Added some information in the log about delivery failures.
   Fixed: memory leak while refreshing list data.
   The notebooks now remember the fonts dropped on them.
   Greater tolerance of multipart mail.
   Ignore command lines that start with '>', and ignore the
      'Re:' in Subject lines that contain a command.
   Archiving change: an archive is now made half an hour after
      midnight, rather than exactly at midnight, to avoid an
      ambiguity about which day it is.  As a side-effect, the
      archive file names are now shorter.
   Fixed: name of Leader file was not being saved by DumpINI.
   Fixed: quotes not removed when LoadINI loaded one item.

Version 1.56
   New option to specify the character set for archive files.
   Removed misleading '(writeonly)' comment in the response to
      a digest subscription.
   Made the responses to 'which' and 'lists' commands more informative.
   Only members or owners may use the 'who' and 'index' and 'get' commands.
   Allow the option of commands in the Subject line.
   Added movelog.cmd to the 'tools' directory.
   Renamed shutdown.cmd to shutmajor.cmd.
   Added an error message for the case where commands are
      not in plain text format.
   Fixed 'line too long' bug in LoadINI.
   Internal changes to accommodate Translog modifications.
   Added an option for monthly archiving.
   Fixed error: crash when digest member unsubscribed.
   Added an option to specify the RFC2919 list ID.
   Implemented the "List-" mail header fields
      recommended in RFC2369.
   Added a reference to RFC2142 in the "Setting up the
      e-mail accounts" section of the manual.
   Improved method for calculating the age of an archive file.
   Modified the "force early check" logic to ensure that
      all lists are checked when new mail arrives.
   Removed redundant list refreshing.
   LoadINI and DumpINI updated to handle a various new options.
   Fixed restriction: footer file name was restricted to
      32 characters, now changed to 512.

Version 1.55
   Added provision for SMTP AUTH authentication.
   Implemented hidden 'X' argument.  The unintended message
      "Weasel has signalled new mail" is removed unless we
      specify the 'X' as a command-line parameter.
   Rule change: List owners may post to the list even if
      they are not listed as members.
   Added the concepts of 'read only' and 'write only' list members.
   Added digest subscriptions.

Version 1.54
   One-second sleep between Weasel notification and check
      for new messages.

Version 1.53
   Changes to support the case where the mail server is
      the multidomain version of Weasel.
   Fixed problem where 'From:' address was being cleared
      in some cases.

Version 1.5
   More helpful message for "subscription failed".
   Improved end-of-file check in the case where we are
      not stripping attachments.
   Now checking POP server address at each connection
      attempt, rather than once only at program startup.

Version 1.4
   Better logging on login failure.
   Added global event semaphore for shutdown.
   Fixed error: was not accepting nonstandard ports.
   Added option to remove attachments from mail.
   Added remote configuration.
   New macro %S to give the sender's address.
   Option to insert leading material from a file.

Version 1.3
   Use the Return-Path in preference to the From header to
      find out who the sender was.
   Admin displays number of list members.
   Don't insert [listname] if the abbreviated list name
      is the empty string.
   Some tightening up on critical section protection.
   Fixed bug triggered by leading '[' in Subject line.
   Added MIME header lines to specify 8-bit transfer in
      responses to admin requests.
   More careful check on when first archive file should
      be created.
   Removed 'uninteresting' headers from archived mail.
   Added test for tab character in "From:" line.

Version 1.2
   Allow listname abbreviations up to 32 chars long (but still
      truncating them to 8 chars in the log)
   Alterations to be consistent with new version of Weasel.
   Added a file containing the archive separator.
   Fixed a bug in 'who'.
   Put the 'Re:' before the [abbrev] rather than after.
   Added 'index' and 'get' commands.
   Implemented archives.
   Removed dependence on RndFile library module.
   Implemented option for multiple moderators.
   Added 'lists' and 'which' commands.

Version 1.1
   Added option for POP-before-SMTP authentication.
   Added 'who' command.
   List properties notebook rearranged slightly.
   More control over which commands are legal.
   Fixed: problem with outbound SMTP.
   Increased timeout when accessing POP server.

Version 1.0
   General Availability version released.

Version 0.8
   Accept leading spaces before an "end" command.
   List may now have a filter. (untested)
   List may now have a welcome message.
   "Help" command implemented.
   Option to prevent "subscribe" being used by anyone
      except moderator.
   Syntax of "subscribe" and "unsubscribe" extended to allow
      an e-mail address as optional second parameter.

Version 0.7
   Fixed an error in handling "Re" in subject line.
   Added LoadINI and DumpINI to the distribution.
   Changed list properties dialogue to be in the form of
      a notebook.
   In Admin, recognise <Esc> as a cancellation code when
      typing a list name or new subscriber name.
   The manual (MAJOR.INF) is now basically complete.

Version 0.6
   New feature: moderated lists.

Version 0.5
   Fixed error introduced in 0.4, where admin requests were
      not being processed in the "local weasel" case.
   In Reply-To field, we don't add an '@' if the mail domain
      is a null string.
   In MAIL FROM command we use our hostname rather than
      our domain name.

Version 0.4
   Option to decide whether mail to a list will be accepted from
      people not subscribed to that list.
   Now supporting non-Weasel servers.
   Miscellaneous other changes that I forgot to log.

Version 0.3
   Event flags for faster communication with Weasel.  (These will
      have no effect until I update Weasel.)
   Admin: for editing list data, broke up the dialogue into two
      separate dialogue boxes.
   New option: e-mail address to send error messages to.
   New option: can add a canned trailer to all list messages.

Version 0.2
   Fixed an error in parsing e-mail address.
   Ensure lists get re-read after Admin program changes them.
   E-mail domain set in Admin rather than read from nameserver.
   Added "abbreviated list name" field to Admin data.
   Delivered mail now has updated "Reply-To" and "Subject" lines.

Version 0.1
   First beta-test version.

