Wed Dec 28 01:51:49 1994  Matti E. Aarnio  (mea@oj287)

	* router/functions.c run_listexpand():
	    Fixed (again) an uninitialized "al" variable.
	    Odd that I THOUGHT of having it fixed at the master source...
	    (I thought this was a bug in ssift/tsift, but no.)

	* Makefile:
	    Set version to be: 2.99.3

	* transports/mailbox/Makefile:
	    Remove the reference to  dotlock.o -- it is INCLUDED into
	    the  mailbox.c, thus no separate compilation!

	* router/rfc822.c, router/rfc822hdrs.c:
	    Gave a deep look to the analysis of "Sender:" -header.
	    In a case when the provided "Sender:" is junk, like:
		to demo
		From: demo2
		Sender: demo3-[12]
	    it used to pick up the mal-formed "Sender:" header, which
	    is stamped as  BadHeader ! .. and used that junk on a call
	    to the router() -- amazingly the router() didn't crash on it..

	    Now it is a bit more persistent on picking up only valid
	    headers (so headers which are not stamped as "BadHeader"),
	    and use them.  If no valid sender header is found, one
	    mkSender() was added for creating a valid sender-header
	    as a last-ditch measure..

	* scheduler/transports.c:
	    Upped the number of FDs for a child-processes from 10 to 32.
	    Solaris childs were unable to mmap() all the necessary dynamic
	    libraries :-/

	* libsh/builtins.c: sh_elements()
	    Replaced it with the new Toronto (22e4) version.

	* libsh/{interpret.c,sh.ssl,sslwalker.c,optimizer.c,zmsh.c}:
	    Found out that  tsift DID NOT work :-/  A lot of wrestling
	    and spotting of tiny details got it finally running...

Sat Dec 24 00:46:15 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Makefile:
	    Did set version number to be  2.99mea

	* Overview, INSTALL, README, README.solaris, README.HP-UX,
	  SiteConfig*, Config*, hostenv/00README, doc/guides/*, man/*:
	    Updates, but no real DOCUMENTING!
	    (that is, no new ZMOG...)

	* lib/nobody.c:
	    A bit of SVR4 features -- will automagically be able to
	    use correct value for "nobody" uid, if no ZENV variable
	    NOBODY is set -- or if it is set to "NOBODY=nobody"

Fri Dec 23 08:50:14 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Dependencies:
	    Added "kvm" to the "smtpserver", and "gdbm" to several
	    others.  ALSO DOCUMENTED THE FILE!

	* smtpserver/loadaver.c:
	    Made some TRUE load-average extracters:
		- __linux__
		- SunOS 4.x
		- SunOS 5.x

	* scheduler/resources.c:
	    Made some TRUE resource codes for various platforms:
		- _POSIX_SOURCE
		- __linux__
		- SUNs (SunOS & Solaris)

	* transports/smtp/smtp.c smtpopen():
	    Trevor Paquette  spotted a missing execution path on
	    case when '-E' parameter is used for the smtp transporter,
	    and there is no "ESMTP" on the remote host initial banner.
	    (But my fix is different with less code duplication..)

	* libsh/execute.c, libsh/interpret.c, libsh/io.c,
	  scheduler/msgerror.c, smtpserver/smtpserver.c,
	  transports/sm/sm.c, transports/smtp/smtp.c,
	  router/functions.c, compat/sendmail/Makefile.in
	    Several changes by Byron Rakitzis to suit BSDI
	    (and propably most of the current BSD 4.4)

	    Added also new variable for the  Config:
		SENDMAILLIB=/usr/lib
	    becase for BSDI, BSD4.4, etc. it is desired to be:
		SENDMAILLIB=/usr/sbin

Thu Dec 22 10:38:26 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/smtp/smtp.c, transports/mailbox/mailbox.c:
	    Pulled some more bits from Edwin Allum's Zmailer-2.2e4

	* router/libdb/bind.c:
	    From  Edwin Allum's  Zmailer-2.2e4  a resolved
	    retry tuneup -- to speed the resolver to give up
	    when there is no data coming up..

Thu Dec 15 23:29:59 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* scheduler/mailq.c:
	    Altered a bit the style of "nonlocal" settings.
	    Now the thing should not jam on "localhost" being
	    unavailable, because DNS says so...

	* hostenv/*:
	    Copied in  Edwin Allum's configs for IRIXes, and
	    Guy Middleton's AIX3.2 -- and added DOTLOCK scheme
	    ( + some comments )  to SunOS4.1

	* sendmail/sendmail.c:
	    fchown() call was missing GROUP parameter.
	    Added there "-1"

	* transports/mailbox/mailbox.c:
	    Created   propably_x400()  -function, and altered error
	    reports on anonymous delivery to a file ("/...") to reflect
	    possible X.400 addresses, when such is likely.
	    ("/X=XXXX/Y=YYYY/...")

	    Merged in Ken Lalonde's/Edwin Allum's  DOTLOCK facility.

	* proto/zmailer.sh:
	    Small change on the parameters of the router startup:
		was:	... router -dkn$NROUTERS
		new:	... router -dkn $NROUTERS
	    Now it should start more than 9 routers...

	* libsh/interpreter.c, libsh/sh.ssl, ....
	    Altered   sift/in/tfis  construction to do STRINGWISE
	    regexpr matches with GNU regex engine, and converted
	    the old behaviour to name:  tsift/in/tfist

	    -- a bit latter altered the names to be:
		sift/in/tfis	-- Tokens - compability alias
		tsift/in/tfist	-- Tokens  (new PRIMARY name)
		ssift/in/tfiss	-- Strings (new name)

Wed Dec 14 09:12:16 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/smtp/smtp.c:
	    When doing verbose trace to a host without any MX-records,
	    Solaris 2.3 crashed the smtp transport -- printf() doesn't
	    like NULLs as string pointers...

	* transports/libta/lockaddr.c, transports/libta/ctlopen.c,
	  include/mail.h, scheduler/scheduler.c, scheduler/mailq.c,
	  router/rfc822.c:
	    In attempt to create a state-preserving safe multi-invocation
	    transaction locking:

	    A PID based locking -- THIS ALTERS THE SCHEDULER FILE FORMAT
	    AND THUS OLDER  TRANSPORTERS  MUST NOT BE USED IF THE ROUTER
	    IS NEW!  (The scheduler must also match!)
	    Recipient-definition line (lock location) was altered:
		Old:  "r~...."
		New:  "r~PPPPPP...."
	    where "~" is lock-flag, and "PPPPPP" is space for storing
	    transport-client PID -- or 6 spaces, when there is no lock.

	    From now-on, if there is a lock-state on some recipient, the
	    scheduler tests to see if there is a process (pid) processing
	    it, and continues with next job, dropping the locked one for
	    a moment.

	    All NEW jobs arrive both to the $POSTOFFICE/scheduler/,
	    and the $POSTOFFICE/transport/, collecting them happens
	    from the $POSTOFFICE/scheduler (so the current queue need
	    not to be touched), however while there are locked files
	    running, the scheduler will re-scan the $POSTOFFICE/transport/
	    directory every 5 minutes.  If a file from that scan has
	    its i-node number in  spt_mesh[L_CTLFILE] -database, it
	    is skipped (it is an active file, not some previously locked
	    one).

	* transports/smtp/smtp.c: deliver()
	    Oops on parameter processing, the forced 8-bitness didn't
	    happen..

	* router/libdb/bind.c, transports/smtp/smtp.c, transports/hold/hold.c:
	    resolver usage got a little change -- to avoid screwing up
	    request size parameter when doing retry.. (size storage variable
	    was also used as a return value storage -> query screwed up on
	    the retry..)

	* proto/cf/*.cf:
	    Many files, minor changes...  (And a couple major ones)

Tue Dec 13 13:26:05 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* smtpserver/loadaver.c:  NEW
	    A stub for getting the system load-average

	* smtpserver/smtpserver.c:
	    Respond with a
	  "400 Sorry, system is too loaded for email reception at the moment"
	    when the system load-average (from  loadavg_current())
	    is over a given threshold value
	    (XX: that message is most likely wrong.. )

	* router/functions.c: run_listexpand()
	    The pseudo-lisp is tough stuff to get right...
	    Finally it does any arbitary expansion with very
	    little memory consumption :-)

Mon Dec 12 20:42:59 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* router/libdb/ordered.c, router/libdb/unordered.c,
	  router/libdb/search.h:
	    Use  USE_MMAP  capability and map the textual database
	    file into memory for latter use -- will need less syscalls
	    for the lookup...

	* transports/smtp/smtp.c: writemimeline()
	    Counter each byte twice on the output when producing Q-P
	    encoded output -> output was circa 35 chars wide...  Oops..

Fri Dec  9 08:15:15 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transporters/smtp/smtp.c:
	    One missing "break;" on  getopt() processing.  Oops..
	    Thanks to Terry Combs <combstm@appstate.edu> for the fix
	    (and I guess he uses the "-E" option..)

	* scheduler/
	    The Scheduler got some revampings into the  mux()/ipcpause()
	    routines, and their invocations so that inter-reaper delay
	    should shorten -- should do it via signal handler ?

	* router/libdb/header.c:
	    Re-defined the envelope environment entry "authinfo"
	    to be of  nilUserSemantics -> it will accept any input

	* router/rfc822hdrs.c: hdr_print()
	    Changed the printout of  DateTime -header so that
	    when a previously existing header is available, use
	    it as is, but skip the leading white space -> no
	    more EXTRA SPACE/TAB every time a message goes thru
	    the Zmailer.

	* util/listexpand.c:
	    Add envelope environment entry "via listexpand" to the
	    produced (new) file, thus the output will be like this:

	    Received: by nic.funet.fi via listexpand id <92706-1>;
		Fri, 9 Dec 1994 08:01:41 +0200
	    Received: by nic.funet.fi id <92690-3>; Fri, 9 Dec 1994
		08:01:37 +0200

	* transports/sm/sm.c:
	* transports/smtp/smtp.c:
	    "USE_MMAP"-version had problems at scanning for/advancing/
	    pointing to proper  location in the input file.
	    The net result was a loop in sm, and wrong contents in smtp.

	* smtpserver/smtpserver.c:
	    *Sigh* Solaris signal handling is more complex than "just"
	    "signal(SIGCHLD,reaper)" in the BSD... (a generic problem)
	    Luckily it is enough to handle it with  signal(SIGCHLD,SIG_IGN)
	    which works pretty much everywhere.


Fri Nov 25 09:41:24 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/smtp/smtp.c:
	    One NULL passage to the  sprintf()  caused crash on Solaris,
	    same one prints "(null)" on SunOS...

	* lib/cfgets.c:
	    Forgot to keep an eye on counted length, and thus were
	    able to overflow the buffer...  Uargh..  ("--n;" missing..)

Wed Nov 16 22:57:22 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* router/functions.c: run_daemon()
	    Use  rewinddir()  instead of seekdir().
	    The rewinddir() works better on BSDI systems very least,
	    and apparently works on a major part of the systems
	    (I have yet to come by a system where it doesn't work..)

Fri Nov 11 11:44:28 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* hostenv/README  -- some documenting things (barely begun..)

	* transports/libta/ctlopen.c, include/ta.h, transports/smtp/smtp.c,
	  transports/mailbox/mailbox.c, transports/sm/sm.c:
	    Made a case of using  mmap()  to map into memory the
	    sharable (R/O) parts of the mail-file..

	* router/rfc822hdrs.c: mkMessageId()
	    Altered the created message-id format a bit, previous
	    timezone name "(ett)" will now be presented as "ett", and
	    the file will get a unique sequential number on it as well
	    (unique within each instance of the routing process.)

Thu Nov 10 10:01:55 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Implemented  "Content-Conversion: prohibited" -header
	  to the transporters:
		transports/sm/sm.c
		transports/smtp/smtp.c
		transports/libta/mimeheaders.c
		transports/mailbox/mailbox.c
	  (follow the suite of the Sendmail+Emil..)

	* Eradicted  bcopy()  from the sources.  We can use  memcpy()
	  (possibly inline, possibly optimized library stuff) easily.
	  Files:
		lib/linebuffer.c	lib/token.c
		libc/bcopy.c		libc/whathost.c
		libsh/expand.c		libsh/io.c
		libsh/zsh.c		router/functions.c
		router/rfc822hdrs.c	scheduler/transport.c
		scheduler/readconfig.c	scheduler/mailq.c
		router/libdb/bind.c	transports/smtp/smtp.c
		transports/mailbox/mailbox.c
		support/nfslock/nfslock.c
	  Didn't eradict  bcopy() from  support/vacation/vacation.c !
	  It is a bit sensitive issue in there...

	* Incorporating patches for OSF1v2.0 by 
	  Franz Fischer <fischer@lpr.e-technik.tu-muenchen.de>
	     lib/allocate.c,		libc/getdtblsiz.c
	     libsh/io.c,		router/libdb/bind.c
	     router/prototypes.h,	router/router.c
	     scheduler/msgerror.c,	smtpserver/smtpserver.c
	     transports/smtp/smtp.c,	utils/makendbm/makendbm.c
	     utils/makendbm/ndbmlook.c
	  Those were some ALPHA related problems on the DNS handling,
	  and related declarations...  Also a couple "beauty points"
	  at the makendbm tools.

	* router/libdb/gdbm.c, hostenv/Linux
	    Finally re-tried compiling Zmailer on Linux, and caught
	    problems...  GDBM has changed since my previous touch
	    with it.

Mon Oct 10 01:07:24 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* router/functions.c  run_expandlist():
	    New "lisp-like" function to combine the functions of
	    the  listaddresses, and  zsh-script routine  maprrouter().
	    With this the router core expansion should minimize.

Fri Oct  7 16:21:53 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* lib/allocate.c:
	    Replaced one reference to  bcopy()  with  memcpy()..

	* transports/sm/sm.c:
	   Edited in the same routine as is in the  transports/smtp/smtp.c
	   to handle MIME conversions -- some details do vary..

	* transports/libta/mimeheaders.c, include/ta.h,
	  transports/smtp/smtp.c:
	    Still more restructuring, now clean (?) way to make
	    all the TEXT/PLAIN conversions on transfer:
	      -- 8BIT -> QP
	      -- 7BIT -- no change
	      -- QP   -> 8BIT (if the target is "force_8bit" ...)

Thu Oct  6 09:10:09 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/smtp/smtp.c:
	    Restructured header pre-processing, now it can
	    downgrade "TEXT/PLAIN; CHARSET=ISO-8859-*"+"C-T-E: 8BIT"
	    into "TEXT/PLAIN; CHARSET=US-ASCII"+"C-T-E: 7BIT", when
	    it notices that message body is all in 7-bits..

	* transports/libta/mimeheaders.c downgrade_charset():
	    A new procedure

	* man/*
	    Some updates to man-pages..

	* SiteConfig*, Makefile{,.in}, libc/Makefile{,.in}:
	    "make install" so that it installs also  libzmailer.a
	    into user-defined  LIBRARYDIR, and  zmailer.h  into
	    user-defined INCLUDEDIR..

Thu Sep 29 09:55:40 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/mailbox/mailbox.c:
	    Mailbox access-time preservation test was the wrong way :-(

Wed Sep 28 16:22:40 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/mailbox/mailbox.c:
	    Nasty rewrite bug, which nobody had found for ages..
	    (Nobody but myself uses the MIME-rewritters ?)

Mon Sep 26 09:09:15 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Dump 2.97mea

	* transports/mailbox/mailbox.c:
	    - MMDF-style mailbox separators with '-M' option!
	    - MIME-processing is now line oriented to facilitate
	      easier improving of it into handling beasts like
	      "message/alternate"  with multiple bodies..

Thu Sep 22 18:55:47 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/smtp/smtp.c, transports/sm/sm.c, transports/hold/hold.c,
	  transports/mailbox/mailbox.c, transports/errormail/errormail.c,
	  scheduler/msgerror.c, scheduler/update.c, scheduler/transport.c,
	  scheduler/scheduler.c, smtpserver/smtpserver.c, libc/whathost.c,
	  lib/detach.c, transports/libta/warning.c, libmalloc/malloc.c,
	  libmalloc/getsize.c, libc/getdtblsiz.c, libsh/regexp.c,
	  libsh/execute.c, libsh/interpret.c, lib/rfc822date.c, router/db.c,
	  router/functions.c, transports/libta/ctlopen.c, hostenv/Linux:
	    Did port to Linux
	    (Various POSIX.1 problems..
	     Usually solved by "#include NDIR_H" ..)

	* transports/libta/buildbndry.c:
	    Added sequence "=_" into the boundary, thus rendering
	    it such which most likely will not be generated by any
	    MIME-compliant system in their message texts.

	* Makefile, libsh/Makefile, proto/Makefile:
	    Got rid of  /bin/ed  on file editing.
	    Instead uses AWK and SED. (Portability problems
	    to Linux caused this..)

	* Config, SiteConfig, bin/mklibsupport, ...
	    Configuring changed somewhat:
		- Compiler/compilation dependent things are on
		  file  Config
		- Site policy things (location of directories) are
		  on file  SiteConfig

	* transports/mailbox/mailbox.c ( putmail() ):
	    When CREATING a (mailbox) file, create it with ATIME of 0,
	    that is, "NEVER READ"...

Fri Sep 16 12:04:25 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* router/functions.c ( run_filepriv() ):
	    Added option  -M maxfilepriv  to the  $(filepriv XXX) to
	    get rid of a need to have system-wide compiled value for it.
	    Now I think we can create a system with  644 for ~user/.forward
	    and 664 for $MAILSHARE/lists/...  My users did ask for it..

Thu Sep 15 17:03:58 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/mailbox/mailbox.c ( putmail() ):
	    Added ONE space to the FROM_ line:

	      From SPC from@addr SPC SPC date
				     ^^^ NEW
	    (To be compatible with competition -- err..  sendmail..)

Sat Sep 10 02:37:31 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* After a few days of testing at MAILHOST.UTU.FI, dumped 2.96..

	* smtpserver/smtpserver.c:
	    More fixes to the complex SMTP-option handling..

	* scheduler/readconfig.c:
	    SIGUSR1 -- rereadconfig() -- did crash on memory
	    corruption due to double-freeing a buffer.

	* scheduler/*.c:
	* transports/libta/ctlopen.c:
	    More fixes on the DSN, and related topics.

	* transports/mailbox/mailbox.c:
	    A message from  "channel error" (SMTP MAIL FROM:<>, or alike)
	    got bad UNIX mailbox header.  Now the "From_"-address is
	    always "postmaster" under such circumstances.

	* transports/smtp/smtp.c:
	    Do recognize the "DSN" (and "XDSN") magic tokens of NOTARY-DSN
	    capability on the remote system.
	    (Missing: actual DSN interaction..)

	* router/rfc822.c: ( sequencer() )
	* router/libdb/header.c:
	    Will accept DSN parameters, and carry them as attributes
	    to the router tasks, and in the end will output them to
	    the channels.  The scripts need to address problems on the
	    DSN data alteration, when it comes to list-expansions.
	    (Specs are developing..)

	    Thought: Internal list-expansion needs to be expanded into
		     a full-scale C-code which invokes router for the
		     recipients, and feeds them all the necessary attributes.
		     That way it will (perhaps) be SMALLER with its memory
		     usage as compared to the present   maprrouter()
		     script function.

	* router/rfc822hdrs.c, router/rfc822.c:
	    rfc822date() returns delivered UNIX-time in RFC822
	    format INCLUDING TIMEZONE CORRECTION, but we actually
	    want to create it only when it doesn't already exist,
	    othervice it shall be left alone.
	    Trouble on translating to the local TZ is on several
	    mismatches in the time-zones, and frankly it is too
	    painfull to be really usefull.  When the full header-
	    string is there already, off we go and use it.

	* router/rfc822.ssl, router/rfc822walk.c, router/rfc822hdrs.c:
	    Parse and "understand" "Received: ... convert XXX;" -token!

Fri Sep  2 11:35:53 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* scheduler/scheduler.c:
	* scheduler/scheduler.h:
	    Initial code for parsing DSN related transporter header
	    entries.

	* scheduler/msgerror.c:
	* scheduler/scheduler.h:
	    Print out  "Original-Envelope-Id:", and "Original-Rcpt:",
	    if data is available (if not, be quiet about them.)

	* smtpserver/smtpserver.c:
	    Accepts (and syntax-checks!) IETF-NOTARY-DRPT parameters,
	    and checks upon illegal characters on the input line, like
	    feed of control/8-bit chars on the SMTP protocol line..
	    (ASCII 0:es are also flagged!)

	* include/mail.h:
	    _CF_RCPTNOTARY-tag -- "DSN parameters for preceeding recipient"
	    _CF_DSNENVID-tag   -- "DSN ENVID data"

	* include/mailer.h:
	    enum HeaderClass got new elts:
		eToDSN, eEnvid

	* router/libdb/header.c:
	    Learned to recognize new transport envelope headers:
		todsn, envid

	* include/ta.h:
	* transports/libta/ctlopen.c:
	    "struct ctldesc" has now "envid" field, and it
	    gets filled in on the  ctlopen()  parser..
	    There is also "dsnflags", which also gets filled..

Thu Sep  1 11:13:03 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* libsh/optimizer.c:
	    Bad interaction with  USE_ALLOCA() -- the  ncode[]
	    array MUST be returnable to the callers scope, thus
	    it can't be alloca() buffer...

Mon Aug 29 22:45:09 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Dump 2.95mea, and put it running at NIC.
	  Public release tomorrow ?

	* transports/smtp/smtp.c:
	    EHLO-processing had parameter bug on  smtpwrite()...

	* scheduler/msgerror.c:
	* scheduler/scheduler.c:
	   Still more wrestling with NOTARY error reporting..
	   Now it prints REWRITTEN headers also from within
	   scheduler's error reporter...

Sun Aug 28 22:26:26 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/mailbox/mailbox.c:
	* transports/smtp/smtp.c:
	* transports/libta/diagnostics.c:
	    More wrestling with NOTARY error reporting..

	* transports/errormail/errormail.c:
	    More wrestling with NOTARY error reporting..
	    Will write out REWRITTEN headers -- so that there
	    is local "Received:" entry as well!

	* scheduler/msgerror.c:
	    Still more wrestling with NOTARY error reporting..

Wed Aug 24 02:00:17 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Dumped 2.94mea

	* smtpserver/rfc821scn.c:
	    Address like:  <test@test_vms.domain>  is to be accepted,
	    even though it is illegal, if you have a strict look at
	    the standards..

	* transports/mailbox/mailbox.c:
	* transports/smtp/smpt.c:
	    Testing NOTARY message production.

	* transports/libta/diagnostics.c:
	    Produce the NOTARY diagnostics ( notaryreport() )

	* scheduler/transport.c:
	    Had a peek as to why some machines (SunOS 4.1.3 most notably)
	    can't run more than about 50 (!) channel programs at a time!
	    (Marco Hernandez @ CREN.ORG reported this problem..)
	    At the moment:  NO IDEA  :-/
	    (20 hours latter:
			Each scheduler file is kept open when it is in
			active processing, each active transporter has
			a diagnostics pipe back to the scheduler, and some
			systems have SIGNED CHARs as FD storage in FILE-
			structures..

			If transporters run with GANG-SCHEDULER, that is
			multiple files are spooled to same transporter,
			all those files must be kept open by the scheduler
			until the transporter acks them back..	)

	* scheduler/msgerror.c, scheduler/update.c,
	  transports/libta/diagnostic.c:
	    Revised report-back format, as well as error
	    reporting procedure fairly completely.

	    Now the transporters CAN report IETF-NOTARY data, and the
	    scheduler will then use it to report on the return email.
	    (Exact format evolves still, but one thing is sure:
	     it shall not contain \n's, nor \t's!)

	    Transporter main error reporter is  scheduler/msgerror.c,
	    NOT the  transports/errormsg/errormsg.c !
	    The latter can be used for some trivialities, though..
	    (How the heck it can get NOTARY data ? -- solved three
	     days latter..)

Tue Aug 23 21:52:18 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/smtp/smtp.c:
	    An error in EHLO responce analysis did omit the
	    final responce line, which in one case did have
	    effect:
		250-XXXXX
		250 8BITMIME
	    Thus SMTP didn't learn that the receiver is 8-bit
	    capable..

	    Added an option to  smtp:  -E   -- try EHLO only if
	    the remote system has "EHLO" on one of its initial
	    message lines...  If not, don't do it.
	    Default case is to do  EHLO  ALWAYS, and if it fails
	    ("500 Unknown command", or hangup.., use HELO..)

	* transports/errormail/errormail.c:
	* scheduler/msgerror.c:
	    Skip over the Zmailer envelope lines in the original
	    email so that the file to be written out does not
	    contain anything but RFC-822 (+MIME) headers..

Wed Aug 17 14:12:06 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* utils/listexpand.c:
	    Wrote this to test how much 650 email recipients
	    will really expand the memory of the router.
	    Instead of running a built-in expansion within
	    the aliases.cf, this is to be called externally to
	    produce similar remapping and resubmitting the file
	    back to the router. (Via a trip thru scheduler, that is)
	    	    Internal expansion: 32 MB
	    	    External expansion: 3.5 MB (yes, only about 10 %!)

	* libsh/trap.c (eval): 
	    Carelessness on referring to the "savefile" buffer.
	    It can be NULL ptr under some occasions.
	    ( -> newaliases  crashed )

Tue Aug 16 17:04:43 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Freezing and dumping 2.93mea

	* *.cf -files:
	    Processing of addresses which turn to be LOCAL to the
	    machine will with sample files (proto/cf/) produce
	    results like:
	    	(local nobody /dev/null 123)
		(local postmaster root 0)
		(local somealias "|/path/to/program args" 1234)
	    instead of the old style:
	        (local - /dev/null 123)
		(local - root 0)
		(local - "|/path/to/program args" 1234)
	    (These DO NOT contain my earlier quote additions, which
	     were for helping on expansions of esoteric addresses.
	     Oh well..  'Wrong' set of source scripts..)


	* many files..
	    FINALLY the mystic crashes on "router recipient" got
	    explained.  Stdio uses its own file descriptors, and
	    it takes only so many (resource: filehandles) leaked
	    (non closed) stdio buffers to use them all up, and even
	    though there are lotsa free fd's, there is no free
	    stdiobuf..  Mainly  router/functions.c: run_listaddrs()

	    Now the beast is written in portable manner, which only
	    assumes UNIX fd semantics (and that  dup() and dup2() work)

	    Mystic  libc/__fopen.c -file becomes used, if you define
	    -DDEBUG_FOPEN, Then it traces the usage of stdio files..

	* router/functions.c: run_daemon()
	    Fixed the memory allocation/freeup.  Memory that gets
	    freed explicitely is to be picked up from  MEM_MALLOC
	    space, not from anywhere else (did cause some cores..)

	* libs/ -- all libraries, most Makefile's, ..
	    All library files (*.a) get collected into one directory,
	    the "libs/"-directory.

	* transports/libta/mimeheaders.c:
	    Occasionally a transported file had:
	    	Content-Type: text
	    which caused carelessly written code to crash when
	    subtype (as in "text/plain") was not present at all..

	* hostenv/SunOS4.1:
	    Define  GETDTABLESIZE so that  libc/getdtblsiz.c won't
	    get compiled into a code and thus override system library
	    routine..

	* hostenv/SunOS5.2:
	    Use only  "MAILLOCK"  on Solaris, not the LOCKF at all!

	* transports/mailbox/mailbox.c:
	    On Solaris the file locking shall not be used on
	    "/dev/null"..
	    Incorporated  Edwin Allum's Solaris patches into
	    the code -- maillock() et.al.

	* transports/smtp/smtp.c:
	    Some minor tuneups on detecting when to downgrade headers,
	    and when not to.

	* libsh/interpret.c:
	    Under some conditions under-read varstack.  PURIFY test
	    use did help me to detect that at all..

      ( * At some non-defined point in history did dump
          zmailer-2.92 --- 940802 it appears to be.	)

Wed Jul 27 02:31:28 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Freeze and dump zmailer-2.91mea-940727.tar.gz

	* many files..
	    Converting   emalloc(strlen(buf)+1) + strcpy()
	    to  strsave()  did cause amazing amount of problems.
	    They aren't all gone (don't know for sure, though),
	    and some others may have surfaced.

	* transports/errormail/errormail.c, scheduler/msgerror.c:
	    Alter error reporting towards that of the IETF NOTARY
	    working group draft -- not yet there by million miles,
	    I am afraid..
	    THIS ALTERED ALSO THE SYSTEM ERROR MESSAGE FILES!

	* */Makefile{,.in}:
	    Lotsa things..  Mainly on getting things to compile
	    ALL the related libraries before linking them in.

	* transports/libta/ctlopen.c, transports/libta/mimeheaders.c,
	  transports/libta/writeheaders.c, ...
	    Improve email header conversion facilities.
	    Proper email BODY conversion is still missing..
	    (text/plain gets processed, but  other formats
	     call for improvements..)

Mon Jun 27 07:24:44 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/libta/mimeheaders.c :
	    Improved processing of "Content-Type:", and
	    added "Received: .... convert rfc822-to-XXXX;..."
	    clauses.  ( to "quoted-printable" and to "8bit")

	* BUGS, ChangeLog, README, README.solaris, INSTALL :
	    Updated documentation, worklist, ....


Sun Jun 26 01:31:54 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Freeze and dump   zmailer-2.90-940626.tar.gz

	* router/functions.c (run_listaddrs):
	    An empty "include" file (empty .forward, as was the case)
	    caused SIGSEGV due to a NULL-ptr dereference.
	    Created smarter error handling.

	* router/rfc822.ssl:
	    Teached "AMailboxList" to understand '<>' as a valid
	    address ("channel error" source..) as is often case
	    with error-messages from mailers..  Now it accepts:
			From: <>

	    That unearthed a lot of problems elsewere with NULL-pointer
	    dereferrence and now don't even remember where everywhere...
	    ( s_copy_tree() at least )

Sat Jun 25 01:31:54 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* libsh/builtins.c, libsh/path.c, libsh/vcall.c,
	  router/functions.c, router/rfc822.c:
	    USE_ALLOCA -- use alloca() for some local buffer allocations
	                  which don't need to be preserved over the scope
			  of stack-frame existance.

	* hostenv/ :
	    Don't select on own  getopt() vs. system supplied one.
	    Use the own one always.

	* libsh/interpret.c:
	    Improve interaction with the  getopt()

	* libmalloc/ :
	    Improved the integration with the Zmailer -- this is a new
	    version of the "Toronto Malloc", and quite a headache to
	    integrate..

Tue Jun 21 09:52:21 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* router/rfc822.c (run_rfc822): 
	    Argument processing bombed -- possibly due to usage of
	    the GCC, possibly due to something else.


Tue Jun 21 09:52:21 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Created this file to track changes

	  Building Zmailer 2.90xxx -- that is, alphas/betas of 3.0

	* Pre-ChangeLog transcript follows:


Various features/fixes done at Univ of Turku by Matti Aarnio <mea@utu.fi>


Compiling with  GCC 2.3.3, and 2.4.5 with -Wall  -- generated a lot of
warnings, which one after another have been eradicted..  Found also some
real bugs with that.  (BUT NOT ALL!)

I am compiling it on SunOS 4.1.3 with  GCC 2.5.6, and "-traditional"
option..


Referred <Emil> is IDA's big-brother (IDA-sendmail's MIME processing toolbox)


Multilevel incoming mail priorizing into router:
	- mail(3) has  mail_priority  variable, which must be set
	  to desired value before  mail_close() is called.
	  Value 0 means normal behaviour (and is the default).
	  Any positive value means picking further down into
	  ROUTERDIRS Z-environment variable.  (See mail(3), and router(8))

	- compat/sendmail/sendmail accepts  -Pnn, which is feed to
	  mail_priority (see above)  As an alternate, it also honours
	  environment variable   MAILPRIORITY which has numeric value.
	<Maybe "Precedence:" header should be processed ?>

	- Router processes at first all files from the  POSTOFFICE/router/
	  directory, and once it is empty, it looks into alternates.
	  If alternate had anything to work upon, directory scanning returns
	  to the first level dir.
	  As an end result, the further messages are into the alternate
	  directories, that less frequently they get processed.

router/functions.c:
router/conf.c:
router/dateparse.c:
router/rfc822.c:
router/router.c:
	- Implemented first real multi-router system with working locks.
	- Extended it with ROUTERDIRS - multiple priority levels.
	- Added some {}'s into dateparse.c
	- Added configurability of  $(filepriv ...) into conf.c
	- Accepted and inserted a patch on RFC header processing which
	  blew on "header"-line like:  ": some text"
	  (Some programs inserted such junk into HEADERS - tin among them.)
	  Source: "Michael S. Shappe" <mss1@cornell.edu>
	- Added option  -E  into $(listaddresses ...) creating
	  an "Errors-To:" header, and making sure the SMTP
	  'MAIL FROM:<>' contains that address.
	<Should use Emil ?>

router/libdb/bind.c:
	- added query-type 'any' to be used in place of '-t cname' on
	  DNS canonization. (In manner of  BSD sendmail.)

smtpserver/smtpserver.c:
	- SMTP-server does check syntax of RFC821 inputs, specifically
	  it checks "MAIL FROM:< .... >" and "RCPT TO:< .... >" syntaxes,
	  and is adamant with them.  -- many misconfigured PC-mail programs
	  have been found with it...   --  rfc821scn.c  does most of it.
	- Uses  Remote Authentication Service (RFC 1413) to (try to)
	  see who is it, who contacts us.  (See also: "libauth/*")

	- SMTP-server supports RFC 1425-1428   EHLO greeting (in place of
	  HELO command), and related  8BITMIME, and SIZE extensions.
	  Summa summarum:  Now we advertice that we can accept 8-bit SMTP,
	  not just blindly accept it..
	- SMTP-server fully uses RFC 1427 SIZE feature (if user defines it),
	  and thus can report "insufficient storage space at the moment",
	  if sender tries to send email which is far too big..
	<Should check MIME-compiance of the message, if it has 8-bit stuff
	 in it, and not give   250 Ok  if check fails.  Also maybe should
	 check syntax of RFC822 headers, and complain at the "." time, if
	 that check fails..  Precedence can be found from PP.>
	<Should use Emil ?>


transports/libta/routermxes.c (new)
	- router can feed target "mx" information, same as it got when
	  analyzing routing, to the actual transporter program.
	  In place of a  hostname,  it codes:  ((mxer)(mxer mxer)(mxer))
	  (This is into the router results!)

transports/libta/ctlopen.c
transports/libta/mimeheaders.c (new)
	- new way to read in the headers, and to handle them when
	  rewriting them.  Original was to get them in as single
	  multiline string.  This splits them to individual lines
	  and keeps track of them in that way..


transports/smtp/smtp.c:
	- Better support for local sender verbose trace
	- If connection setup fails (channel open timeout, or remote
	  closes the channel upon our face -- whatever before HELO),
	  we try to talk to next assigned MX target.
	- Support of RFC 1425-1428  8BITMIME transport
	- Uses RFC 1427 SIZE=, if receiving system knows it (EHLO protocol)
	- Downgrades message to "Content-Transfer-Encoding: QUOTED-PRINTABLE",
	  1) "Content-Transfer-Encoding: 8BIT" is present
	     in the primary headers,
	  2) remote system has no  8BITMIME capability,
	  3) message contains 8-bit characters.
	- Downgrades message header to "Content-Transfer-Encoding: 7BIT",
	  if message data is 7-bit, and said header is present.
	- If "C-T-E:" was turned to "7BIT", and "Content-Type:" was
	  "text/plain; charset=ISO-*", then update "C-T:" to have
	  "charset=US-ASCII" -- simplifies things (?)
	- Doesn't do full job of analyzing things like "Content-Type:",
	  rather assumes that "C-T-E:" is present on "C-T: text/plain"
	  messages, and any complex things are built properly.
	- setsockopt() arguments corrected.
	<Should use Emil>

transports/sm/sm.c:
	- Support for local sender verbose trace
	- Downgrades messages in same manner as smtp does, if "sm"
	  doesn't have "-8" in its options when running some subchannel.
	<Should use Emil>


transports/mailbox/mailbox.c:
	- Allow local addresses to be   user@domain, and use that kind
	  of addresses on storing mails to mailboxes.
	<Really should only do header rewrites into FQDN format, and
	 have local users feed to via scheduler as   `username' (non FQDN)>
	- Use proper NFS locking  ( lockf() )
	<Should use Emil>
	- Partial MIME converter:
		A  text/plain; Quoted-Printable  message will be converted
		into  8BIT  format, IF the "mailbox" program is called with
		argument: "-8"!  (If that argument is not present, nothing
		new is done.)

libc/libc.a:
	- mail_open() does a  whathost() to figure out NFS-mounted
	  postoffices.  <Guy Middleton>
	- using free()d storage -- Matthias Urlichs, et.al. in   mail.c
	- whathost.c  generalizes NFS mountpoint figuring system.
	- mail_close() is affected by  mail_priority variable, as well
	  as  ROUTERDIRS  Z-environment.  See  mail(3)

libauth/*:
	- RFC 1413 using identd protocol using library.
	  (Host configuration option  USE_AUTH)


compat/sendmail/sendmail:
	- Accept (and ignore) options:  -oem, -J, -em
	- Accept option -Pnn, see above about  mail_priority (mail(3))
	- Making sure "to <address>" -lines contain only valid
	  characters -- well, don't contain newlines!
	- Accept "From " (FROM-SPACE) input (sendmailism), and
	  drop such line away, if next line looks like a real header.
	- Do binary (-t option) processing buffer at a time, instead of
	  a character at a time..
	<Check MIME-headers, and correct 8-bit handling ???>
	<Check submitted headers (syntactically), and barf if fail ???>

compat/rmail/rmail:
	- Bill Wisner's rmail patch applied.


lib/rfc822scan.c:
	- Nested comments fix -- don't remember who
	- Kicked out bit-stripping -- headers are 7-bit stuff!

lib/linebuffer.c:
	- Explicit exits with  ferror() amd feof() conditions!
	  Suggested by  haa@cs.hut.fi
	- Made a serious mistake, and two weeks later found it..
	- accepted a patch from  Ken Lalonde <ken@cs.toronto.edu>,
	  finally did it corrently !

ssl/ssl.c:
	- array space reservation one-off, fix by 	Matthias Urlichs

utils/makendbm/
	- wrote whole package

utils/zmstats.perl
	- wrote this small piece

utils/fullnamealiasmaker.perl
	- wrote this (larger) piece

support/vacation/
	- extended to behave somewhat like SunOS  vacation(1), only better :)

scheduler/mailq.c:
	- Moved function   getmntpt()  to  (new file) libc/whathost.c
