Version Changes for Hypermail
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2.0b3  - 8/15/98 
=================

  o Added validation of domains so that the generation of mailto: is
    much more accurate than the previous method.

  o Added support for Content-Disposition MIME Header so as to get the
    filename from the header.

  o Added verification of filenames to assure they are safe to use and
    will not cause filesystem problems

  o Fixed a problem with parsing the ending MIME boundary (it expended headers
    following that)

  o Found and removed a one-byte buffer overflow in the line continuation code.

  o Corrected docs/hypermail.1 and TODO to reflect the proper RFC 822
    parsing was actually included in version 2.0b1

  o Corrected a typo in string.c that prevented the proper generation 
    of mailto: links for email names with numbers [0-9] in them. 

  o Corrected the base64 decoder error which caused files to get an 
    extra zero-byte appended at times. (When storing attachments to disk.)

  o Added additional ported systems to the README

  o Removed the "#ifndef" from the defines in options.h. We do not want to
    inherit any define values from other places. If there are confilcts
    then I need to correct them. Inheriting defines can lead to unforeseen
    results.

  o attachments:
       - comments are now generated in the output mail for each attachment 
         that is written in a separate file. The comment looks like:
            '<!-- attachment="filename" -->' in the standard comment style. 

  o buffers and overflows
    - mdecodeRFC2047() now has an output buffer size argument
    - had to remove the use of rmcr() at two places, since that function uses
      a very strict static buffer limiting the maximum line length pretty bad.
    - parseurl() now features an output buffer size argument
    - parseemail() now features an output buffer size argument
  
  o multipart/alternative 
    - added awareness and parser "intelligence" to pick the last prefered
      content-type within a series of alternatives (as MIME tells us to
      do). This has not yet been very thoroughly tested.
    - added the preferedcontent() function that returns wether a content-type
      is prefered or not (as set with hm_prefered_types). Default prefered 
      type is 'text/plain' (if hm_prefered_types is unused).
  
  o output
    - added the experiment function printhtml(). It strips off unwanted html
      tags from the output, even if they are used in attached HTML files. I.e
      <HTML> and </HTML>.
    - made 'showheaders' not use <BR> or newlines since the BRs are ignored
      anyway, and the newlines are already present in each header line.
    - added 'hm_show_headers' which is a list of what headers to include when 
      the 'showheaders' option is used. For now, it also controls which 
      headers to show when attached mails are shown. Although I can imagine 
      that you'd like separate lists (since for attached mails, you'd like i.e
      subject which you may not need for the main mail itself). If 
      'hm_show_headers' isn't used, all headers will be shown.
    - made the <PRE> system in the printbody() function a little smarter, and
      now it prevents multiple </PRE> and <P> tags better. It did however
      introduce another side effect (although a less serious one imho) and 
      that is an extra pair of <PRE></PRE> after the last attachment when 
      using 'showhtml'.
  
  o parsing
    - made the multi-line merger function to make all lines get a regular 
      white space between them when they're put together. Previously, this 
      character was left as-is, which could be a space or a tab (or any other 
      isspace()) letter.
    - check changed to check for "<!-- received" as the start of parsing
      previous html files in the event that the archive maintainer whishes
      to add comments in the header template HTML files.
    - in_list() now checks for list items case insensitive
    - corrected so Message-ID:, References and Supersedes: lines are not
      converted into mailto: URLs.
    - corrected off-by-one in isquote that was causing array boundary read 
      errors.
    - corrected off-by-one in printbody line output that was causing array
      boundary read errors.

Real thanks are in order for Daniel Stenberg and David D. Kilzer. They helped
greatly with making this release possible by sending in enhancements, comments
and bug fixes.  Thanks Guys!
  
2.0b2  - 6/07/98 
=================

  o Corrected command line processing for individual messages received 
    on standard input.

  o Corrected formating of Next message links when incremental updating 
    is done.

  o Corrected the template filenames in docs/hmrc.html. Added "file" 
    to them.

  o Added additional systems to the list of ported systems.

  o Reset certain options back to the proper defaults.

  o Corrected problem in printbody in regards to printing HTML embedded
    in a message. Still work to do here.

  o Changed address options to assure I didn't get landfield.com 
    information inadvertantly set in hundreds of archives because
    the admins just took the defaults. ;)

2.0b1  6/05/98 - Kent Landfield
===============================

WARNING: There have been too many changes to this version to list them
         all here.  What appears below are some of the highlights.

  o Command line settings override what is in the config file. In the
    past the command line variables were read and set before the config
    file was read. (Needed to get the name of the config file from the
    command line.) This made it hard to have a default list configuration
    file and make single runs with only one variable changed. Now processing
    sets the hypermail internal options by:
  
  	Using Compiled in defaults specified in options.h,
            then reads Hypermail Environment variables if set,
            then looks for and reads any Configuration file specified
        and finally uses the Command line settings specified by the user.

    NOTE: THIS IS DIFFERENT THAN PAST HYPERMAIL USAGE.
  
  o Configurable Setting (.hmrc file) or Compile Time Variable to 
    Domain-ize Addresses -- addresses appearing in the RFC822 field 
    which lack hostname can't be made into proper HREFs when Hypermail
    does it's thing.  They are coded with:  mailto:(no%20email)
  
    Because the MTA resides on the same host as the list, it is 
    often not require to domain-ize these addresses for delivery.
    In such cases, I think it would nice if Hypermail could be 
    programmed to output:  mailto:kent@landfield.com  instead.
    This would probably work well as a *required* definition 
    during compilation; however, it should not simply rely on 
    the output from `hostname` in case you want to override with 
    an MX entry or alternate domain (if you run virtual domains)
  
  o Added capability to have customizable index html headers, message
    html headers and html footers.  Able to use substitution cookies in 
    the header and footer template files.
  
       Substitution cookies supported:
  
           %% - '%' character
           %~ - storage directory
           %e - email addr of message author - Not valid on index pages
           %h - HMURL
           %i - Message-id - Not valid on index pages
           %l - archive label
           %m - Mailto address
           %p - PROGNAME
           %s - Subject of message or Index Title
           %v - VERSION
           %u - Expanded version link (HMURL,PROGNAME,VERSION)
           \n - newline character
           \t - tab character
  
       Additional cookies generate the complete META lines:
  
           %A - Author META HTML - Not valid on index pages
                  <META NAME="Author" CONTENT="name (email)">
           %B - <BODY> html statement
           %S - Subject META TAG - Not valid on index pages
                  <META NAME="Subject" CONTENT="subject">
  
  o Generates META tags in articles Author and Subject.
  
  o Now uses "configure" to generate the makefiles. This is rather
    weak at present and needs to be added to/tested on other systems
    but at least it's a start.
  
  o The config.h was renamed to options.h to support configure usage.
  
  o patchlevel.h added to facilitate better patches in the future. Still
    need to fully integrate it's useage in version displays.
  
  o Added example .rc files to show how to customize list's and their
    looks. 
  
  o Removed the _print.c files that had existed in the 103b2 release and 
    replaced them with template headers/footer files. 
  
  o Extended archive path creation to make missing directories.
  
  o Added capabilities dir pathing to allow archive creation by date 
    variables.
   
        %d - two digit day of month (1-28/30/31)
        %D - three letter day of the week
        %m - two digit month of year (1-12)
        %M - three letter month of year (Jan, Feb, ..., Dec)
        %y - four digit year (1990,..2001)
  
    RC example:           hm_dir = /some/archive/listname/%y/%M
    ENV example:          HM_DIR=/some/archive/listname/%y/%M
    Command line example: -d /some/archive/listname/%y/%M
  
    Expands to:  /some/archive/listname/1998/May
  
    All files would be archived during that run in that directory.
    Subsequent executions will put the messages in the directories 
    according to the date the messages were received on the archive 
    site.
  
  o All "mailto:" links can include the "subject" so that the Subject: 
    line of netscape mailer is automatically filled in.
  
  o Fixed "Re:" and redundant "Re:" variation && MS FW... 
  
  o Greatly enhanced getname() to correctly deal with most all email 
    addresses.  X.400 addresses are not well supported yet. 
  
  o Corrected getreply() to better support the In-Reply-To: formats. The 
    routine needs to revisited when a readline routine is inserted to
    properly deal with continuation lines.
  
  o Added additional documentation describing the Hypermail configuration 
    file.

  o Added additional documentation describing how to customize HTML 
    generated pages.
  
  o Corrected many petty problems such as:
     - recursive '%' substitution.  A % in a subject line could cause 
       an ugly recursion problem in a mail command expansion.
     - title length problem.  Length of a title needs to be limited to 
       less than 64 characters as indicated by HTML specs.
     - Weblinted the generated output and corrected various things.
     - Removed unused and unneeded variables

  o Change various storage length defines in hypermail.h

Patches Contributed From: "Roy T. Fielding" <fielding@kiwi.ics.uci.edu>
------------------------------------------------------------------------

  o Fixed the umask default,
  
  o Fixed default directory and file creation modes,
  
  o Fixed the many date problems, 
  
  o Corrected one of the Message-ID bugs, 
  
  o Removed annoying #start/#end fragments that mess up the browser history.

Patches Contributed By: Byron Darrah <bdarr@sed.hac.com>
----------------------------------------------------------

  o Added a menu bar for a header and footer on all pages and removed 
    the bulleted list items that it replaces.  
  
  o Reworked the general appearance of header and footer parts of html pages.
  
  o Added the "hm_hmail" configuration parameter and -n command line
    option for specifying an email address for input to a hypermail
    archive.
  
  o Added "New Message" and "Reply" buttons to the menu bar for submitting
    messages to a hypermail based list.
  
Patches Contributed From: Jared Reisinger <feety@hhhh.org>
---------------------------------------------------------

  o Fixed configfile substring problem.  
  
  o SHOWBR, IQUOTES, SHOWHR, EURODATE, SHOWREPLIES, and MAILCOMMAND 
    now run-time configurable.  
  
  o Fixed post leap-day error.  
  
  o More robust Message-ID parsing.  
  
  o Better SHOWHTML handling for indented lines.  
  
  o Allow IQUOTES when not using SHOWHTML.

Patches Contributed From: Daniel Stenberg <Daniel.Stenberg@sth.frontec.se>
--------------------------------------------------------------------------

  o I had all calls to the decodeRFC2047() function moved to *after* the
    merging of long lines.
  
  o decodeRFC2047() now correctly concatenates two succeeding "encoded words".
    I now call the function mdecodeRfc2047() since it now allocates the new
    string.
  
  o Now informs if the attachment wasn't properly decoded when stored to disk.
    This happens if the Content-Transfer-Encoding specified isn't known to
    the parser. When this happens, the attachment is stored as 8bit octet-
    stream.
  
  o Now supports the encoding type 'x-uue' for uudecoding. I think there are
    mailers that use different names for the same encoding type so we better
    watch out for them in the future...
  
  o Added the 'demimed' field to the body struct to keep track of 
    header lines+ that have been RFC2047 converted already.
  
  o Kent Landfield sent me an interesting mail that showed me several weird
    bugs in the MIME area.
     A. The Quoted-Printable decoder bugged. A quick fix solved that.
     B. The quoted printable decoder didn't support unlimited size of the line
        the encoded text decodes into. I wrote a new function that seems to do
        it properly.
     C. Some important headers were not properly supported if they were split
        up on several lines. I had to rewrite the header parsing system to make
        this work. It now scans all headers and concatenate them into single
        lines before any function is trying to parse or decode them.
     D. It also showed a need for a uudecoder for the 'x-uue' encode type. This
        is only noted for the future as I haven't written any decoder for this
        format [yet].
  
  o decodeRFC2047 replaces the former RFC1522 function. I made it support
    'encoded-words' anywhere in the line and several different ones on the
    same line is now supported. The only flaw I'm still aware of now, is that
    if there are two encoded-words next to each other, the result should not
    show the spaces between them. My function unfortunately still does.
  
  o renamed decodeRFC1522 to decodeRFC2045.
  
  o decodeRFC1522 (quoted printable header decoding) didn't do well if the
    ending ?= sequence was in the middle of the line. I think this function
    will need more extensive testing.
  
  o Attached mails' headers (To:, From:, Date: and Subject:) are now shown
    in the html.
  
  o Attached mails that contains attachments did force me to add a stack system
    for the multipart boundary strings. Seems to work now. (Can't wait to see
    an attached mail that contains an attached mail that contains ... )
  
  o strcpymax() introduced to prevent buffer overflows on extra-long headers
  
  o Lines starting with 'from ' messed up the parser pretty badly. It now
    checks for 'From ' lines (case sensitive) with an empty preceding line
    to split mails.
  
  o Now extracts attachments to separate binary files.
  
  o Supports multiple lined headers.
  
  o Supports quoted-printable and base64 encoded headers.
  
  o Supports base64 encoded text/plain
  
  o Rewrote the URL and email parsing to allow multiple URLs and email
    addresses on each line.
  
  o Extended the original functionality to much better deal with MIMEd
    mails and the standards from RFC 1521 and 1522. There are still flaws in
    compliance with those but the majority of all mails using mimed texts
    will be presented in a fairly decent fashion.

Patches Contributed From: David D Kilzer <ddkilzer@ti.com>
-----------------------------------------------------------

  o Fixed problem with 'From: ' header lines in messages with the
    following format: "From: <email@address.com>" wherein the "name"
    from the previous email message would be used instead of reverting
    to the address itself.

  o URLs can now include ampersands (&) if they are preceded by question
    marks (?) in the URL string.

  o Email messages with no Subject line no longer grab the previous
    email's subject.

  o Reworked the order of output so that "message" links are always at
    the top of the page in article pages and date/thread/subject/author
    pages.

  o Now escape '%' in mail URLs.

  o Escape for '+' was wrong, changed to '%2B' (was '%22').

  o Updated replace() function to recurse on 'afterstring' variable
    rather than the whole 'newstring'.  More efficient and allows '%'
    escaping.

  o config.h: Added configuration option for SHOW_MESSAGE_LINKS which
    turns all message headers and footers off (except for the links to
    the date, subject, thread and author pages).  SHOW_MESSAGE_LINKS
    overrides the setting of SHOWREPLIES.

  o print.c (writearticles): Removed use of currentemail, currentid,
    and currentsubject by forcing use of email2, msgid2, inreply2,
    subject2, and name2 when calling struct.c (hashreplylookup).  This
    was needed after I rearranged the order in which articles were
    printed.

  o string.c (convurls): Added code in two locations for the 
    Message-Id code segment to recurse on the remaining portion of the
    line being processed.  Each Message-Id found forces a return from
    convurls() after a recursive call.  This prevents infinite recursion
    (a Bad Thing generally speaking).  Note: we assume that Message-Ids
    and URLs/email addresses do NOT appear in the same line.

  o string.c (convurls): Changed format string from "%.3d" to "%.4d".
    Fixed major bug in outputting links for Message-Ids.

  o string.c (convurls): Fixed assumption in code for identifying
    Message-Ids that there was only one Message-Id per line.  We now
    stop gobbling up text used for a link with a space (' ') or a tab
    ('\t').

  o string.c (convurls): Added int got_question_mark in URL processing
    code to permit an ampersand ('&') in a URL provided it comes after a
    question mark in the same URL (a GET method with POST data).  Added
    one line of code and changed another to accomplish this.

  o string.c (convurls): Added code to check whether the next item to
    URL-ize is an email address (containing an at sign, '@').  If it is,
    we break out of the URL for loop and go process the email address.

  o parse.c (loadoldheaders): Modified initial fgets() call to skip any
    non-comment lines (i.e. "<html>" and "<head>").

  o string.c (makemailcommand): Added code to escape percent signs 
    ('%') when escaping spaces (' ') and plus signs ('+').  Percent 
    signs must be escaped first since other escape sequences use the
    percent sign followed by a two-digit hexadecimal number.  We're now
    a little more MIME-compliant.

  o string.c (replace): Changed the replace() function to recurse only
    on the 'afterstring' portion of the URL instead of the whole rebuilt
    URL.  This is both more efficient and prevents infinite recursion
    problems when escaping percent signs ('%') with '%25'.  

  o string.c (makemailcommand): Fixed escape sequence for plus signs
    ('+') from '%22' to '%2B'.

LOTS of other small patches from lots of other helpful people. I hope to 
be able to more accurately list them in the final 2.0 version.

1.03b2  3/10/98 - Kent Landfield
=================================

  o Header corrections made, 

  o all current memory leaks plugged, 

  o variable initialization corrected, 

  o expanded response message recognition, 

  o fixed many threading related bugs. 

  o Restructuring directory layout for ease of support and to 
    make adding utilities easier. 

  o Added additional archive utilities. 

1.03b1  4/6/97 - Kent Landfield
================================

  o Corrected memory leaks, 

  o cleaned up HTML produced, 

  o ran purify, lint and insight and cleaned up output.  

  o Added the ability to customize header/footers via crude means
    but hey, it works.

1.02  8/1/94 - Kevin Hughes
============================
        Fixed configfile problem, different usage() output, days[] space
        fix, NODATE, stripzone() fix, insig fix, SHOWBR, SHOWHR, IQUOTES,
        THRDLEVELS.

1.01  7/29/94 - Kevin Hughes
============================
        Printfooter declaration, getdate() and timezone names changed
        to avoid library conflicts. Bad #define fixed (null) bug.

1.0   7/29/94 - Kevin Hughes
============================
        Configuration file, logic fixes, better "re:" stripping,
        name tags, default index.html (HM_DEFAULTINDEX), default
        directory name can be mailbox name, mailto: fix, better dates,
        better error messages, numbered files are padded to four digits,
        headers are always in <pre>, next in thread, maybe in reply and
        maybe reply, MAILCOMMAND, EURODATE, commented source, chmods only
        new files, <html>, custom mail command variables.

1.0b3 7/14/94 - Kevin Hughes
============================
        Environment variables added, ampersands are converted.

1.0b2 7/13/94 - Kevin Hughes
============================
        Incremental updating added and various parsing bugs fixed.

1.0b1 7/6/94 - Kevin Hughes
============================
        Hypermail rewritten in C. Because the source is so new and
        relatively untested, it's still considered to be in beta
        until feedback from users is received.
