Version 2.4:	1998-06-09
Changes since version 2.3:
* Changed array dimensions of filenames.
* Used mkstemp(3) to create unique filenames.
* Added stderr redirection to run_cmd().
* Log error message and exit if fork(2) fails.
* Changed file locking from flock(2) to fcntl(2).
* Discard messages with "Encrypt-Key:" and no "**" marks.
* Ignore lines between reply block and "**" marks, if the decrypted reply
  block contains an "Encrypt-Key:" header but no "**" marks.
* New macros blank(s), hdrmarks(s), hashmarks(s), ekmarks(s), beginpgp(s),
  endpgp(s) in freedom.h to avoid problems with DOS "\r\n" line endings.
* Install type-1 remailer keys in repgp-keys.pgp instead of pubring.pgp.
* 'pgp -kv' is called only once in init_remailer() to create the list of
  type-1 remailer keys from repgp-keys.pgp.
* Re-indented source code.  (Run 'indent -gnu *.[ch]' before generating
  diffs relative to 2.3.)
* Updated remailer list URL's in the help file.

Version 2.3:	1998-05-01
Changes since version 2.2:
* rxmatch() rewritten for Philipp Hazel's Perl-Compatible RegExp library.
* The PCRE sources from ftp://ftp.cus.cam.ac.uk/pub/software/programs/pcre/
  (version 1.09) are supplied in Src/pcre/.
* Fixed runlatentqueue() to dequeue messages without control file.
* Fixed read_conf(), read_conf_w() and read_conf_i() macros in remailer.c.
* Changed open(2) permissions from 660 to 600 (consistent with umask(077)).
* Changed fake headers "PGP-Recursive: Yes" to "Recursive: PGP" and
  "Cut-Recursive: Yes" to "Recursive: Cut".
* New function get_from() to find reply address for autoresponder requests.
* Checking and filtering multiple-line headers should now work correctly.
* Discard duplicate ##'ed Subject:, From:, Reply-To: and Newsgroups: headers.
* No subject blocking anymore; changed mailconf() to print blocked headers.
* New function flushleft() removes leading whitespace from substrings.
* chop() removes only the last linebreak (\n or \r\n) from the input string.
* Setting USE_MIX to 2 now enables transparent remixing ("remix" feature),
  suggested by Andy Dustman <adustman@comstar.net>.
* User-controlled remixing ("remix2" feature) with new directive "Remix-To:".
* New configuration variables TYPE2_LIST (default: MIX_DIR/type2.list) and
  MIXMASTER (default: MIX_DIR/mixmaster) for use with remix and remix2.
* New function findline() returns linenumber of address in TYPE2_LIST.
* Renamed blocked() to rxfind() and print_blocked() to print_list().
* Transparent PGP encryption of intermediate hops if public key of next hop
  is in the remailer's PGP keyring ("repgp" feature) and remix is disabled.
* New directives "Encrypt-To:" for user-controlled PGP encryption of
  intermediate hops, and "Remail-To:" for remailing without encryption.
* PGP-only support: set ALLOW_PGP to 2 if you want to remail encrypted
  messages only.
* Added type2.list and "pgp -kv" output to freedom-conf autoresponder,
  suggested by Cassandra of Troy <unknown@nym.alias.net>.
* Added GPG public key support (new settings ALLOW_GPG, GPG, and GPG_DIR).
* New function run_cmd() invokes PGP, GPG, Mixmaster and Wget as coprocesses.
* Used PGPPASSFD rather than "-z" to pass the "Encrypt-Key:" string to PGP.
* Changed default location of PASS_FILE to REMAILER_DIR/passphrase.
  All remailer keys (PGP and GPG) must have the same passphrase.
* Added coerce script in coerce/ subdirectory (bug reports to Andy Dustman
  <adustman@comstar.net> or to remailer-operators@anon.lcs.mit.edu).
* Help file and README updated to reflect user-visible changes; added
  section about anonymous follow-up postings (from help@nym.alias.net).

Version 2.2:	1998-01-05
Changes since version 2.1.2:
* Use GNU Wget instead of Lynx to download FTP and HTML source files.
* "Get-URL:" can now be used together with other remailer directives.
* Removed support for "Get-HTML-Source:" and "Return-To:" directives.
* geturl() replaced by append_url() function that calls PGP to ASCII-armor
  and append the downloaded file to the message.
* Mail with "Subject: freedom-conf" returns info about configuration
  and blocked URLs, newsgroups, and subjects.
* New function print_blocked() prints blocklist lines to output stream.
* Fixed test for truncated destination buffer in remove_headers().
* Fixed coredump in updatestats() if STAT_FILE doesn't exist.
* Avoided unnecessary temporary file in encrypt_key().
* scan_message() tests if command header fields are non-empty.
* scan_message() scans only the real and :: headers of the message.
* No whitespace needed after "Encrypted:" keyword.
* Source blocking also reads the "Sender:" header.
* Source-blocked messages don't update the stats, as in Mixmaster 2.0.4.
* Added error message in rxmatch() if regcomp(3) couldn't compile regex.
* regfree(3) compiled regex at the end of rxmatch().
* pgpdecrypt() uses the PGPPASSFD environment variable instead of PGPPASS.
* PASS_PHRASE replaced by PASS_FILE containing the passphrase file name.
* Stats response subject changed to "Cypherpunk Remailer Statistics".
* updatestats() calls simplified and moved into remove_headers().
* Message statistics response is now less detailed.
* Changed default optimization in Makefile to -O2.
* Changed umask to 077 in init_remailer().
* No default for REMAILER_DIR in freedom.h.
* Better upgrading support in Install script.
* Help file and README updated to reflect user-visible changes.

Version 2.1.2:	1997-10-26
Changes since version 2.1.1:
* Used alloca(BUFSIZ) to allocate memory for send_to[] and message_from[]
  buffers in main().
* Added bounds checking in scan_message() to prevent overflow of to[].
* Added warning in remove_headers() if the destination buffer has been
  truncated.
* Removed unnecessary strcpy(to, from) statements in scan_message().

Version 2.1.1:	1997-10-24
Changes since version 2.1:
* Install doesn't try to insert a PGP key in the help file and removes the
  section about "Subject: remailer-key" if remailer is installed without PGP
* "Number of messages queued with latency" line in freedom-stats is written
  only if latent message queueing is enabled.
* blocked() writes a detailed message and returns after the first match.
* Removed unnecessary "Blocked ..." syslog messages outside blocked().
* Added bounds checking in chop() to prevent array overflow problems.
* Added "const" to all declarations of read-only variables.
* Initialized send_to[] and message_from[] in main().
* Used "sizeof" to compute the length of string constants.
* Some more code reformatting.
The following bugs were found by Andy Dustman <andy@CCMSD.chem.uga.edu>:
* Fixed bugs in strifind() and remove_headers() that occasionally lead to
  false blocking of messages.
* Fixed divide-by-zero bug in parsetime() for messages with "Latent-Time:
  +0:00r".
* Added missing braces around compound statement in scan_message().

Version 2.1:	1997-10-06
Changes since version 2.0:
* Runtime configuration file freedom.conf instead of config.h.
* New function init_remailer() for parsing freedom.conf.
* Environment variable FREEDOM overrides REMAILER_DIR.
* Install script, contributed by Ulf Moeller <um@idril.shnet.org>.
* The password for the remailer must be specified at compile time.
* Messages are written to the Mixmaster queue if USE_MIX is set.
* pgpdecrypt() decrypts only the first PGP packet of the incoming message.
* PGP is called with "-f" and closed stderr to get rid of annoying status
  and error messages.
* Undecryptable PGP messages are deleted and not appended to the mail spool.
* No DEBUG option anymore: logging is done with syslog if USE_SYSLOG is set.
* New configuration option ALLOW_LTIME to control queuing of latent messages.
* Blocking flock(2) locks in stats and PGP functions, queuing with
  DEFAULT_LATENCY is no longer needed.
* Scaled bar graph with stacked bars for statistics as in Mixmaster 2.0.4.
* Changed REG_EXP_BLOCKING to USE_RX (-DUSE_RX in Makefile).
* Dropped support for the CERN line-mode WWW browser.  The variable LYNX
  must be set to the path of the Lynx program if ALLOW_WWW is set.
* Messages with "Anon-Post-To:" header are always treated as Usenet postings
  even if they are not posted locally.
* Default subject changed to "none".  It is only added to Usenet postings.
* Scrapped stringlower(); borrowed string strileft(), strifind(), and strieq()
  from Mixmaster 2.0.4 for case-independent string comparisons.
* Scrapped genid(); rand(3) is initialized with getpid(2) and time(2) and used
  for generating random strings.
* Common function mailfile() instead of mailhelp() and mailkey().
* mailurl() replaced by simpler geturl() function.  The anonymous message
  is composed and mailed in main().
* cut() no longer eats leading blanks in the message body.
* Simplified function runlatentqueue() for dequeuing messages.
* Moved tests for ALLOW_* from main() to scan_message().
* Renamed some variables and reformatted the source code.
* Corrected URL of remailer list in the help file.

Version 2.0:	1997-08-18
Changes since version 1.6:
* New maintainer: Johannes Kroeger <hanne@squirrel.owl.de>
* The remailer queues incoming messages with a default latency
  if more than one remailer process is running at the same time.
* The remailer doesn't run the latent queue automatically after remailing;
  you must run "remailer -q" from cron to do this.
* Configurable size limit SIZE_LIMIT for incoming messages.
* Separate block list for destination addresses and newsgroups.
* URL's are checked against block list before being accessed.
* Simplified parsing of remailer directives and fixed infinite loop when
  processing messages with no blank line after the :: and ## header blocks.
* Careful checking of time strings in parsetime() to make it bullet-proof.
* Sendmail now called with -t as in Mixmaster rather than putting the
  destination on the sendmail command line.
* The remailer honors ##'ed To:, Cc: and Bcc: headers and checks them for
  blocked destinations.
* Bit-bucket messages should now have a Null: line in the ::'ed header block.
* Added filtering of user-supplied headers, controlled by new configuration
  file "headers.del" as in Mixmaster 2.0.4.
* The remailer kills Reply-To: headers with blocked destinations to prevent
  mailbombs from autoresponders (test newsgroups etc.).
* No autoresponder files (help, stats, key) are sent to destination-blocked
  Reply-To: or From: addresses.
* Two configurable name <address> pairs are used: ANON_NAME <ANON_ADDR> for
  anonymous messages and REMAILER_NAME <REMAILER_ADDRESS> for autoresponder
  answers.
* New function scan_subject() for scanning and blocking ##'ed subject lines.
* The remailer now always kills incoming subject headers ("ksub" feature).
* A "Subject: None" header is added if no ##'ed subject line is found.
* New function encrypt_sub() implements Andy Dustman's "esub" code.
* Scrapped count.c and used Matt Ghio's genid() code to generate random
  ASCII id's for file names and subject digest encryption in encrypt_sub().
* Removed support for obsolete X-Anon-To: remailer directive (Ghio2 and
  Mixmaster don't support it and noone uses it anymore).
* chop() now removes leading whitespace as well.
* block() skips blank lines and lines beginning with # in block lists.
* rxmatch() rewritten for compatibility with GNU Rx library.
* Added PGP option +armorlines=0 in function encrypt_key().
* Changed all fgets(s, n, fp) statements to fgets(s, sizeof(s), fp).
* Changed all line buffers to char[BUFSIZ] for RFC822 compatibility.
  BUFSIZE is defined in <stdio.h> and should be >= 1024.
* Minor changes (prototypes, int main() etc.) to avoid warnings with gcc -Wall.
* Added support for posting through mail2news gateways instead of inews,
  controlled by new configuration variable MAIL2NEWS in config.h.
* Subject lines added to remailer help and key files, no need to have them
  hard-wired in the source code.
* Disclaimer as RFC822 "Comments:" header; defined as DISCLAIMER in config.h.
* Improved statistics output format as in Mixmaster 2.0.4.
* Help file updated to reflect user-visible changes.
* COPYING file replaced by newer version with updated FSF address.

Version 1.6:
Changes since version 1.5:
* fgets() return value no longer compared to an integer throughout program
* (thanks to shutton@indiana.edu) Makefile has options for HP/UX and popen()
  returns are casted as (FILE *) wherever they occur.
* README updated

Version 1.5:
Changes since version 1.4:
* FSF address updated everywhere it occurred except in COPYING
* now recognizes freedom-stats freedom-key freedom-help in subject
* if get-url: or get-html-source: was received, look for return-to:
  if it exists, mail www response to that address (if not, mail to sender)
* when mailing www response, pre-pend the original message body.
* with above two options, anonymous requests can be made through chains
  and/or sent back through chains

Version 1.4:
Changes since version 1.3:
* Stats code heavily modified; keeps track of more stuff
* Lockfiles used by stats code now
  (so that more than one remailer process doesn't try to update/read stats
  at the same time)
* config.h split into config.h and freedom.h
* address grabbed properly from From: email@address (Real Name)
* No longer accepts Encrypted:PGP (why support those who don't follow
  directions?)  Still not entirely decided on this issue, though.
* config.h & util4.c made so that it's easy to config for lynx instead
  of cern
* INSTALLATION updated to reflect changed config.h
* FTP site added to README

Version 1.3:
Changes since version 1.2:
* now accepts "Encrypted:PGP" as well as "Encrypted: PGP"
* :: can appear on first non-empty line of body, not just on the very
  first line of the body
* Makefile changed so regex.o isn't deleted on a make clean

Version 1.2:
Changes since version 1.1:
* can handle requests for URL's using the CERN linemode browser. if it
  gets a message with a get-url: header, it gets the url and mails it back
  to the sender (this will be expanded on later)
* can handle requests for HTML source via get-html-source: header.

Version 1.1:
Changes since version 1.0:
* allows regular expressions in blocking files
* config option at compile-time to use regular expressions or not
  (using regular expressions requires GNU regex.o or librx.a)
* README, TODO, INSTALLATION updated
* README.blocking added

Version 1.0:
Changes since version 0.99.3b:
* none; this is the release version

Version 0.99.3b:
Changes since version 0.99.2b:
* more checking on fopen()s and opendir()s so that we don't try to access
  unopened files/directories, which should cut out all future segmentation
  faulting.  if file/dir was not opened, alternate action is taken and
  processing continues.
* blank lines in block files no longer cause every message to be blocked.
  this was too easy to fix to look over at this time
* README, TODO, INSTALLATION updated according to changes

Version 0.99.2b:
Changes since version 0.99.1b:
* when handling pgp decrypted messages in remailer.c, does not try to
  process if it wasn't properly decrypted (ie the message was not encrypted
  with the remailer's key but someone else's or not at all)

Version 0.99.1b:
Changes since version 0.99b:
* retslower() removed.  it was horrid.  program now gets further before
  memory faulting
* scan_message returns NON_ANON if the message can't be opened.  this is
  because when processing cutmarks leftovers, there IS no message in that
  file.  As long as trimmings is checked before NON_ANON in remailer.c
  (it is) this fixes it.  This did not mess up on Linux, but caused seg.
  faults on other systems.  Those should be solved now.
* README updated
* TODO updated

Version 0.99b:
Changes since version 0.98b:
* setenv() and unsetenv() calls replaced by putenv()

Version 0.98b:
Changes since version 0.97b:
* decent help file added to distribution
* some debugging info can be turned on at compile-time
* #ifdefs removed and replaced with if (...) 's
* scan_message changed so the anon-to: header does not have to come last
* help file rewritten to reflect changes in the header processing
* README and INSTALLATION updated

Version 0.97b
Changes since version 0.96b:
* Subject blocking added.
* Bug fix version?  Kinda.  Mostly changed the way certain things are done
  so that they are more versatile and avoid problems if someone does
  something wrong:
* the way Cutmarks: and Encrypt-Key: headers are stripped was changed so
  that it is not case-sensitive, causing infinite loops if the user does
  not type them in the proper case. A stupid problem that I knew of when
  I wrote the code but did not feel like fixing.  Its time for fixing has
  come.
* Changed usage of strstr() to strncmp() when looking for headers in
  scan_message.  Probably doesn't matter practically, but seems more
  correct.
* Stupid bug that was documented in the README (up until this point) that
  made it impossible to use uppercase in encrypt-keys and cutmarks was
  finally fixed.
* There was a stupid bug that caused the remailer to leave out the first
  line of mail it was dumping to spool.  Fixed.
* took out all the extraneous printf's I was using for debugging
* added some #defines in config.h and #ifdefs in remailer.c files to
  enable/disable posting, pgp support, and statistics-keeping
* Typo in CHANGES (this file) that said queue could be run by giving
  "-r" when in fact the argument is "-q".  Changed.
* README updated in a few places
* INSTALLATION file updated
* TODO updated
* Makefile changed a bit

Version 0.96b
Changes since version 0.95b:
* bugfix! was reusing cfilename for encrypt-key so if there were more
  cutmarks to process after encrypt-key was used, all was lost; now
  a new tempfile is used for encrypt-key

Version 0.95b
Changes since verson 0.94b:
* now supports Encrypt-Key: header

Version 0.94b
Changes since version 0.93b:
* now queues messages with latent-time header, recognizing XX:XX,
  +XX:XX, and +XX:XXR
* runs latent message queue each time it is run, after recursion is done
* ONLY runs latent message queue if called with argument -q

Version 0.93b
Changes since version 0.92b:
* now mails remailer's key if subject remailer-key is received
* now dumps mail sent anonymous to "null"

Version 0.92b
++ First betatesting version
Changes since verson 0.91:
* GNU public license added
* README, INSTALL, TODO, CHANGES (duh) updated appropriately
* Source files updated to include pointer to the GNU public license

Version 0.91
Changes since version 0.9:
* added support for x-anon-to: and anon-send-to:
* added Organization: line to usenet postings
* added updatestats(STATS_MESSAGE) to usenet postings, at least until I
  modify stats to keep usenet stats separately
* somehow I missed the line in mailstats() that showed how many messages
  were queued with latency.  I added it back.

Version 0.9
Changes since version 0.8:
* <string.h> added to remailer.c  Oops!
* support for cutmarks: header added

Version 0.81
Changes since version 0.8:
* :: headers handled differently & more properly.  they are only considered
  if the :: appears on the first line of the body of the message.
* code to separate headers, remove the first :: header, and paste ## headers
  rewritten but has the same functionality

Version 0.8
Changes since version 0.71:
* support for remail-to: header added
* pgp messages handled differently; now, any unencrypted text after the pgp
  message is also remailed, whereas before, only the unencrypted pgp message
  was remailed

Version 0.71
Changes since version 0.7:
* made remailer check for anon-post-to in real headers as well a :: headers
  silly oversight the first time around
* made remailer only cut out the first :: header to allow chains
* made remailer paste in the ## headers only if last in chain
(I'm half-surprised the damn thing still works at this point)

Version 0.7
Changes since version 0.6:
* usenet posting added via anon-post-to: header

Version 0.6
Changes since version 0.5:
* source blocking added
* destination blocking added

Version 0.5
Changes since version 0.4:
* now mails help file if sent a message with Subject: remailer-help
* fixed bug in mailstats() which printed *'s to stdout instead of pipe
* mailstats() now puts a To: header in, just for looks
* added INSTALL and README file to distribution (in anticipation of release)

Version 0.4
Changes since version 0.3:
* PGP support added
* Stats code reformatted

Version 0.3
Changes since version 0.2:
* statistics code added
* now mails statistics if sent a message with Subject: remailer-stats

Version 0.2
Changes since version 0.1:
* pasted in headers are now actually in the message headers

Version 0.1
* supports type 1 messages with anon-to: and request-remailing-to: headers
* recognizes "::" extra header formats
* discards all original message headers
* pastes in "##" extra headers
* dumps non anonymous mail into spool specified in config.h file
