This NEWS file lists changes which may be important for you, especially
in regard to compatibility in upgrades.

See the git log for more details and technical changes that don't
affect users directly.


1.0.0
=====

- Hello, I'm Ossi, the new maintainer and developer of masqmail. Meillo
  handed masqmail over to me, because he wasn't active anymore.

New, Removed, and Changed Features
----------------------------------

- Removed the expand_h_sender_domain and expand_h_sender_address
  route config options; added map_h_sender_addresses instead

- Removed the set_h_from_domain, set_h_reply_to_domain, and
  set_return_path_domain route config options; instead, the map_...
  options now support specifying an asterisk for the replacement
  user name to rewrite only the domain

- Added map_outgoing_addresses route config option

- Rewrite rules are now applied only to local addresses

- When an address is rewritten, an already present display name will
  now take precedence over one configured in the rewrite rule

- The connection wrapper command is no longer run through a shell,
  though bourne shell quoting rules still apply

- Pipe aliases and the pipe, mda, and online_query commands now also
  use bourne shell quoting rules, and are not limited to ten arguments
  anymore

- In pipe and mda commands, variables are now expanded only after the
  command was split, so quoting them is now unnecessary

- Removed deprecated support for use of the -qo option without a
  route argument

- Folded the resolve_list route option's value dns_a into dns_mx

- Recursive alias expansion does not impose an order between regular
  and glob aliases anymore

- Invalid addresses resulting from alias expansion now trigger a
  bounce for the aliased address rather than being silently dropped,
  and valid addresses resulting from the same alias expansion do not
  receive the mail anymore, either

- Made PID file's location configurable

- Missing directories are now created non-recursively, to avoid
  ownership and permission anomalies

- The documented symlinks 'sendmail', etc. to the masqmail executable
  are now actually created at install time
- Conversely, the masqmail executable cannot be run as rmail anymore;
  use the separately provided script instead

- Improved logging facilities:
  - Added support for logging to stderr instead of a file (or syslog)
  - Error output from helper programs is now forwarded to our log
  - Log messages now include a priority even when not using syslog
  - Removed the -v (verbose) option, as it did not do anything useful
    anymore

- Instant delivery is not asynchronous by default anymore; the -odb
  switch re-enables the old behavior

- The queue flushing mode does not report the delivery status via
  the exit code anymore, as it was ambiguous with multiple messages
  in the queue, and not documented anyway

- The system is now assumed to use UTF-8 encoding; this is reflected
  in particular in the translated bounce message templates

- SIGHUP is not handled anymore, as it would simply re-execute the
  binary, which is better handled by the init system (explicit
  'restart' action instead of fake 'reload' action)

- GLib >= 2.68 (released in 2021) is now required

- More functionality from libresolv is now used, which puts more
  stringent compatibility requirements on it (must be BINDv8-like,
  such as the one from glibc)

Bug Fixes and Minor Improvements
--------------------------------

- Improved robustness of the mail address parser, including plugging
  several security holes

- Improved resolution of hostnames in receiver addresses:
  - Added support for MX records which resolve to multiple hosts
  - Improved robustness of the DNS resource record parser, including
    plugging a probable security hole
  - When one resolution method succeeds, but connecting these hosts
    fails, we do not attempt another resolution method anymore

- Added -verify_return_error to the openssl wrapper examples to make
  them actually secure
- The examples now recommend gnutls over openssl, because the latter
  cannot be made entirely quiet on success

- More configuration errors are detected during startup now, causing
  immediate termination

- Made the priority of many log messages more appropriate

- Made some log messages more helpful

- Improved precision and selectiveness of delivery error reporting
  - Bounce messages do not reveal the server config anymore

- Made sure that the PID file is created in time when daemonizing

- Fixed some potential crashes due to memory management errors,
  mostly in error cases

- Improved handling of disk-full situations during local delivery

- Fixed excess angle-bracketing in "From " lines when delivering to
  local mbox folders

- Fixed mailbox lock file not obeying the mail_dir setting when
  masqmail is built with liblockfile

- Fixed -bs mode (SMTP via inetd):
  - Output erroneously going to stderr instead of stdout
  - Bogus address qualification when run with a UNIX socket on stdio

- Fixed CRAM-MD5 authentication (untested)

- Cleaned up the code a lot:
  - Fixed many memory leaks, though they were short-lived or small
  - Enabled and fixed lots of compiler warnings, some of which revealed
    minor bugs, e.g. type mismatches between variables, parameters, and
    format strings

- Vastly extended the autotest suite; invoke it via "make check" after
  building

- Improved usefulness of run_as_user mode for testing:
  - Fixed support for non-standard log directories
  - Removed some unnecessary permission checks
  - Local mailboxes do not need to correspond with existing users
  - lock_dir can be configured independently from spool_dir now,
    as in normal mode

- Root privileges are now dropped more aggressively, which simplifies
  the code and makes it hopefully somewhat more secure

- Fixed build with --disable-auth

- Improved language and formatting of documentation a lot

- Default paths in man pages now reflect the build settings

- The licensing info is now maintained in SPDX format


0.3.5
=====

- Adds a glob-pattern based aliasing mechanism.

- Adds route selection based on the From header.

- Changes the paths for PID files and lock files. Both are configurable.


0.3.4
=====

- Reworked the route concept to be more general and have better
  names: ``online_routes'' is now known as ``query_routes'' and the
  ``local_net_route'' in now named ``permanent_routes''. Removed the idea
  of the localnet because it is only part of the more general concept:
  permanent routes. `local_nets' are now represented by `allowed_recipients'
  in a permanent route. (See: examples/localnet.route) Now, there is no
  more ambiguity between `local' and `local net'. Run admin/config-transition
  on your config to learn how to update it.

- Switched the default group for masqmail from `trusted' to `mail'.

- Fixed a problem with psb->remote_host, introduced in version 0.3.2

- Fixed a bug in matching of allowed recipients. Thanks to Juergen
  Daubert for finding and reporting the issue.

- Configure options: Enabled auth support per default. Removed support
  for openssl linking. It had been rarely used and could have caused
  legal problems. We don't miss functionality here, because we already
  have builtin MD5 support.  Removed ident support, which is hardly useful
  for masqmail.

- `local_hosts' now understands glob patterns like `*example.org'.


0.3.3
=====

- Fixed a possible security problem, reported by John Lightsey. Unwanted
  identity changes to the user root could have appeared.

- Fixed local-part only address patterns in route conditions, as already
  described in the man page.


0.3.2
=====

- Fixed an important bug with folded headers! In earlier versions mail
  to many recipients may, in unpredictable cases, only have been
  delivered to the ones on the first line. This is fixed now. Sorry for
  the inconvenience.

- Reworked allowed and denied addrs for routes to be more consistent
  and allow more flexible matching:
  - allowed_mail_locals + allowed_return_paths -> allowed_senders
  - not_allowed_mail_locals + not_allowed_return_paths -> denied_senders
  - allowed_rcpt_domains -> allowed_recipients
  - not_allowed_rcpt_domains -> denied_recipients
  See man page masqmail.route(5).

- Reworked online_detect to the simpler online_query. Only pipe is
  supported now. Use
	online_query="/bin/cat /path/to/file"
  instead of
	online_detect=file
	online_file=/path/to/file
  and
	online_query="/path/to/some/script foo"
  instead of
	online_detect=pipe
	online_pipe="/path/to/some/script foo"
  See man page masqmail.conf(5) and admin/config-transition.

- Removed protocol option from route config because it was somehow
  redundant. Now, if `pipe' is set, the protocol will be pipe, otherwise
  it'll be smtp.

- Now the Received headers are much friendlier to read. The header for
  locally (i.e., non-SMTP) received mail is changed to the format postfix
  uses.

- Several improvements to the man pages.

- Updated autoconf.


0.3.1
=====

- Changed the SMTP greeting behavior to match RFC 2821 (always try EHLO
  first). Now always an EHLO greeting is sent first, no matter what kind of
  greeting text the server had sent. If the EHLO failes, an HELO greeting
  is tried as fall back. This change will fix setups in which it hadn't
  been possible to send mail because the server required AUTH but hadn't
  said ``ESMTP'' in its greeting message. Thanks to inne for pointing me
  on that. This fixes also Debian bug #349211.

- The postmaster address is now matched caseless, as required by RFC.

- -qo (without argument) is now considered obsolete. Its behavior (online
  detect and send over the available route) is included in -q. One may
  simply use -q instead. In the -qo case no local mail is sent, but why
  would be not want to do so? -qo (without arg) is still working but will
  likely change its behavior to something more useful in the future.

- Command line address arguments are now added to the recipient
  list instead of subtracted, when -t is used. This covers a rare
  corner-case. It is a change from exim's behavior to postfix's.

- Several changes were made related to the operation modes: The situation
  within the modes was made clear (see man page of masqmail(8)). If more
  than one mode is specified then masqmail aborts. For the default operation
  mode ``accept messages on stdin'' the command line switch -bm was added
  (similar to other MTAs). If masqmail is called without arguments, the
  version information is printed now.

- The command line option -m is recognized now (although ignored).
  Unknown -oXXX options are ignored. Some software (like spost of nmh)
  calls the MTA with -m. This is mainly a relict of old sendmail times
  but needed for compatibility.

- The implementation of the command line option -oem had been
  weird. Now specifying -oem or -oee results in a (some kind of dumb but)
  logical behavior.  Common users will probably not notice any difference.
  The changes affect only the exit code of the corner-case: Calling masqmail
  with -oem but without -oi/-i while submitting messages on stdin.

- Fixed the recognition of lists of unqualified addresses in headers
  when using -t. E.g. `To: alice, bob'.

- Renamed the config file option `alias_local_caseless' to
  `caseless_matching' because the option affects any address matching.

- Renamed the default route for the local network to
  `default local_net_route'. This is only of interest for log/debug file
  studies.

- Improved and updated the man page for masqmail(8), especially in
  respect to -oem which appears to be wrongly implemented. Minor
  improvements of debug messages.


0.3.0
=====

- Start of the new development branch. Attention: Backward
  compatibility with 0.2.x versions will *NOT* be maintained. Upgrading
  from 0.2.x to 0.3.x will probably require manual adjustment of the
  configuration. The script admin/config-tansition can be used to check
  the config files for obsolete options.

- Removed POP3 support (also pop-before-smtp/smtp-after-pop). Use some
  other POP3 client instead.

- Removed maildir support. Use an MDA, like procmail, to deliver to
  maildir.

- Removed the built-in mserver functionality. Use the mservdetect
  program instead. See masqmail.conf(5) under `online_pipe' for details.

- Removed --disable-smtp-server and --with-glib-static configure
  options. We see no more need to not compile the SMTP server function.
  For static linking, see docs/howto-static-linking.

- `host_name' is the only mandatory config option now. If you only set
  host_name, then masqmail will:
  - accept mail on the command line
  - listen on the local port 25 for incoming mail
  - deliver mail locally
  - not know how to handle mail for remote destinations
  Therefore you should set up at least one route configuration.

- Default values are available for: listen_addresses, local_hosts,
  log_dir, spool_dir, mail_dir. See masqmail.conf(5) for the values.

- Mservdetect works much better now.

- Improved the documentation:
  - Added setup guides
  - Improved and simplified the example config
  And removed the old manual because it is really outdated now.

- Renamed misc/ to devel/ and contrib/ to admin/. devel/ contains
  stuff for developers of masqmail, admin/ contains stuff for people who
  install, upgrade, and configure masqmail.


0.2.28
======

- Added STARTTLS support with external wrappers like OpenSSL. See
  `wrapper' and `instant_helo' in masqmail.route(5) for examples how to
  use it. `instant_helo' is a new route config option.


0.2.27
======

- Replaced contributed code with possible licensing problems with
  alternatives. The MD5 implementation changed from the reference
  implementation of RFC 1321 to the Public Domain implementation of
  Solar Designer. The HMAC-MD5 implementation changed from the reference
  implementation of RFC 2104 to an own implementation (ISC License).

- Added the authors of contributed parts to the AUTHORS file.


0.2.26
======

- Write a log message when the daemon starts up. Thanks to Juergen
  Daubert.

- Fix handling of --with-liblockfile=no or --without-liblockfile for
  configure script. Thanks to Nico Roeser.

- Improved the INSTALL file and some man pages. Thanks to Nico Roeser
  Improved the documentation of the wrapper option of route files.


0.2.25
======

- Added server-side SMTP SIZE support. Thanks to Paolo.

- Masqmail will from now on:
  - always remove Bcc: headers
  - never create headers from envelope recipients
  - add ``To: undisclosed-recipients:;'' if no recipient header (To:
    or Cc:) is present in the mail

- Colons (`:') don't need to be quoted in the config file anymore.
  Thanks to Paolo.

- Added checks for too long addresses in SMTP dialog. Thanks to Paolo.

- Moved rmail to sbin and added a man page for it.

- Added warnmsg.tpl.it. Thanks to Paolo.

- The tests do not get installed any longer. All on install created
  dirs are removed on uninstall, except they contain generated data like
  logs, spooled files, or configuration.

- Documented some, yet undocumented, config options. Several typo
  fixes in man pages and code comments.


0.2.24
======

- This version keeps on logging after a restart of the daemon, for
  instance when sending SIGHUP to the daemon process for rereading its
  config.

- Now the daemon keeps the same process id when it receives SIGHUP to
  reread the config.

- Mail messages with lines longer than 4096 characters do not get
  truncated anymore.

- Fixed checking of the trusted group. Primary groups are now
  detected too.

- Mservdetect's man page is now in section 1.

- An `rmail' command is now included and gets installed with
  masqmail. See docs/uucp-setup for more information.

- Docs and thelike, that masqmail installs, is removed on uninstall
  now.


0.2.23
======

- This release fixes a major bug in 0.2.22 which made online detection
  by file unusable. Thanks to Juergen Daubert for reporting and providing
  a patch.

- Masqmail installs to /usr/local by default now. Previously it
  installed to /usr. To regain the old behavior, add
	--prefix=/usr
  to the configure call.

- Man pages get installed again; in 0.2.22 they were not. Again thanks
  to Juergen Daubert. Docs and examples do get installed now too.

- Updated the docs. Moved the man pages from docs/ to man/. Added the
  old manual from the old website to the distribution. Added a bug
  reporting howto.


0.2.22
======

- Hello, I'm meillo, the new maintainer and developer of masqmail. Oku
  handed masqmail over to me, because he wasn't active anymore.

- This release includes various fixes for problems in 0.2.21, mainly
  based on bugs from Debian.

- Distribution specific data has been excluded from the distribution,
  but is separately available on the project's website.

- Man pages will not be generated from xml sources in future, but the
  nroff sources will be maintained directly.

- The default online status file is now
  /var/run/masqmail/masqmail-route, as it already was in the Debian
  package.


0.2.21
======

- Retrospective: Probably, this version was not published in the usual
  way by oku. I (meillo) grabbed it from Debian's package archive. It does
  not introduce new functions but fixes security problems, such as writing
  log files as user `mail'. It also changes the location for pid files;
  they are stored in /var/run/masqmail/ now.


0.2.18
======

- delivery warnings and failures are now also implemented if the
  connection to a server fails. Because masqmail is designed for dialup
  networks, a connection failure will merely generate a warning by default.
  If you deliver in a local network and use the default local_net route,
  this would generate a failure. You can change this behaviour by setting
  'connect_error_fail' to either true or false in the route configurations.


0.2.17
======

- delivery warnings have been finally implemented: if delivery of a mail
  fails temporarily, warning mail will be generated, informing the sender
  of the problem. After some time, the mail will be handled as failing
  permanently, and be bounced. New options: 'warn_intervals',
  'max_defer_time' and 'warnmsg_file'.

- the message templates for failures and warnings will now be installed
  into /usr/share/masqmail/tpl/, and no longer to /etc/masqmail/tpl/. The
  default for the search path (options 'errmsg_file' and 'warnmsg_file'
  has been changed accordingly.

- new option 'last_route'. See man 5 masqmail.route.


0.2.12
======

- two new options have been added:
  - do_pipelining will be used only in broken mail setups. Actually, I
    implemented it only to test such a setup.
  - helo_name for routes sets the helo_name. This may be useful for
    e.g., ssh tunneling, or if do_correcthelo does not work, because you are
    behind a firewall.

- the old 'remote_port' option should not be used any more. Set the
  port with mail_host="foo.bar.com:1234" in the route file instead.


0.2.11
======

- two new options have been added: do_save_envelope_to for the main
  configuration and map_h_mail_followup_to_addresses for the route
  files. See the man pages on purpose and usage.

- the route files can now be mode 0400, owned by root. Previous
  versions had problems when sendmail was called directly by a
  non-privileged user, because the route files could not be read.


0.2.10
======

- this version should work on FreeBSD. At least I care now if it does not.

- masqmail now writes pid files to /var/run/, one for the smtp/queue
  daemon and one for the get daemon. So you now know whom to kill ;-)

- much effort has been put into the Debian package, which now uses debconf.


0.2.7
=====

- sorry for my reluctany in the last months...
- my email address is oku@masqmail.cx. I hope that I keep this for the rest
  of my life...


0.2.6
=====

- you can configure the preferred local delivery mechanism for each user. See
  man page masqmail.conf (5), options mbox_default, mbox_users, mda_users and
  maildir_users. BIT FAT NOTE: if you used an mda, set mbox_default = "mda"
  (or use the mda_users option). Just setting mda is not enough any more.

- there are the allowed_return_paths and not_allowed_return_paths for the
  route configurations, this enables better checking for return path addresses
  than allowed_mail_locals. You can also use this to enable or disable messages
  from null sender addresses (<>) using "<>".
  note: this option has been there for quite a time... I just forgot to
  document it.


0.2.5
=====

- simple relay checking: if you set do_relay=false in masqmail.conf, users
  with a return path that is not local will get a 550 reply if they try to
  deliver to a not local address. This is for users to force them to have a
  proper configuration. It is _not_ to prevent spammers from using your MTA
  as a relay, it can be easily forged! masqmail is not designed to be an
  always accessible MTA for an internet site.

- added Maildir support. To use it, add --enable-maildir as ./configure
  optiom. Currently, if enabled, all local deliveries are to Maildir
  (in ~user/Maildir), and none to mailbox. This is preliminary, future
  versions will be configurable (probably together with mda delivery).


0.2.4
=====

- added -v option, this logs to stdout, so you see what happens when
  calling masqmail from command line. This is not yet finished, and only
  for fetching mails completed.


0.2.3
=====

- new option lock_dir where locks will be put to. Defaults to the spool
  dir with '/lock/' appended (if spool_dir is /var/spool/masqmail/, lock_dir
  is /var/spool/masqmail/lock/).

- You can use the 'do_uidl_dele' option more reliably. The uidl list
  will be written immediately after a message was fetched, so if you use the
  do_uidl and do_uidl_dele option you can safely interrupt masqmail when it
  is getting mail via pop3, and do not get the message again next time.

- there are a lot of new options for ./configure to customize masqmail
  to your needs. See INSTALL.

- Uli Funcke sent a patch with the new options 'local_addresses' and
  'not_local_addresses' for masqmail.conf. With these, you can declare single
  email addresses as local, though they normally are not, and vice versa,
  declare addresses as not local though normally they are (determined with
  local_hosts). These options are not yet documented.


0.2.2
=====

- with -go5m you can now run a get daemon, the command 'masqmail -go5m' will
  fetch mail every five minutes, using the detected online configuration.


0.2.1
=====

- there is a new option for the main conf: online_gets. Using this option,
  you can retrieve mail with just calling masqmail -go, masqmail will detect
  whether it is online (similar to connect_routes (which is now called
  online_routes)).


0.2.0
=====

This is the first release of the development branch of masqmail

- the default configuration is now /etc/masqmail/masqmail.conf
  (as it already was for the debian package). The --with-conffile
  option for configure has been replaced by the --with-confdir option.

- added delivery failure notices:
  - you can customize your own delivery failure report, its
    default location is /etc/masqmail/tpl/failmsg.tpl
  - if a delivery via a route fails permanently (the server replied with
    a 5xx status) the message will be bounced, if it is bounced, no further
    delivery will be attempted.
    This is different to previous versions, where failed messages were kept
    in the queue until it was finally delivered, deleted or forever.

- there is a new online detection method: pipe. This allows you more
  flexibility to detect the current online status, e.g., the DHCP status
  on notebooks.

  This method will at some point replace the 'mserver' option,
  you can already use the program mservdetect to use it:

	online_method=pipe
	online_pipe="/usr/bin/mservdetect localhost 222"

  instead of

	online_detect=mserver
	mserver_iface="localhost:222"


0.1.9
=====

- you can use pipes in routes to implement gateways to uucp, fax, sms etc.
  The setup is similar to mda transport. See man pages.

- for each connection (connect_routes), you can now give a list of
  route files, which will be used in the order given. You can use the
  filter rules (allowed_* and not_allowed_* rules) within each route.


0.1.8
=====

- for pop retrieval and smtp sending you can use a wrapper for e.g., SSL
  tunneling. See man pages.

- a user can delete his mail from the spool with -Mrm if received
  locally, and if you configure with --enable-ident and set
  ident_trusted_nets also if received via smtp.

- a backslash now works to escape characters in the configuration, so
  you can now use quotes inside quotes. All other characters with a
  leading backslash will be converted to itself (\a becomes a, \\
  becomes \).

- you can now use an mda for local mails. The mda will be called
  *after* alias expansion. See documentation for more.


0.1.0
=====

- masqmail can now retrieve mail with pop3. See the manual on how to do that.

- supports now ESMTP AUTH as a client.

- when called with -qo (without a connection name), the online status
  will be checked with the configured method.


0.0.10
======

- there is now alias support. Give the location of the alias file (usually
  /etc/aliases) with e.g. alias_file = "/etc/aliases"

- delivery to pipes is now possible, but only if it appears in an alias file.
  Example:

	pipe: |/usr/bin/command

  will expand the address pipe to "|/usr/bin/command" which invokes
  '/usr/bin/command' as the user and group masqmail is running as.

- entries starting with '\' in alias files will not be exanded further

- changed permissions for queue runs again: got to be root, mail or in
  group trusted.

- some configuration parameters can be read from files, these are
  allowed_mail_locals, not_allowed_mail_locals, allowed_rcpt_domains,
  not_allowed_rcpt_domains, map_return_path_addresses, map_h_from_addresses,
  map_h_reply_to_addresses any entry in these list beginning with a '/' are
  regarded as filenames, the content of these will be put at that location.
  Entries in these files are separated by new lines.  Example:
  in the route file you have:

	map_h_from_addresses = "/etc/masqmail/hfrom.map"

  and hfrom.map contains:

	john: John Smith <jsmith@mail.academic.edu>
	cmiller: "Charlie Miller" <cmiller@foo.com>


UPDATE (Jan 2000): The new home location of MasqMail is
http://www.innominate.org/~oku/masqmail/, the new email address of the
author is Oliver Kurth <kurth@innominate.de>.


0.0.9
=====

- see ChangeLog.


NOTE: The home location of MasqMail at
http://merlin.uni-sw.gwdg.de/~okurth/masqmail/ is uncertain from the
beginning of Nov. 1999! See http://www.freshmeat.net for new
announcements. I leave the university and begin a new job on Nov. 1st 1999
in Berlin :-).


0.0.8
=====

- there is now a FAQ page. See docs/faq.html.

- added allowed_rcpt_domains option for routes.

- added allowed_mail_locals and not_allowed_mail_locals options for routes.

- mailq now gives information about the time mails spent in the queue,
  the message size and the received host.


0.0.7
=====

- bug fix release: for statements in two adjacent lines, the second was not
  recognized.


0.0.6
=====

- bug fix release: some MUAs (cucipop) saw the locally delivered mails
  concatenated. (cucipop is not a MUA  but a pop server, but it has to read
  the mails).


0.0.5
=====

- fixed a bug that caused the headers to be lost under some circumstances.

- added expand_h_sender_domain option for routes.

- rewrote the libresolv part in configure. Should work better now.


0.0.4
=====

- MM should now recognize whether libresolv should be linked.

- added --with-logdir=LOGDIR and --with-spooldir=SPOOLDIR to set directories.
  These will be created if not already existent.

- added --with-user=USER, --with-group=GROUP options to set user and group id
  for MasqMail.


0.0.3
=====

- MasqMail can now deliver mails that are received at online
  time immediately to the internet. See the options detect_online,
  mserver_iface and online_file.

- You can define a route configuration for the local net. See option
  local_net_route.

