Wed Jul 17 16:49:02 1996  Caldera Desktop User  <mea@mea2.pp.utu.fi>

	* (all over the place..) Makefile.in:
	    Releasing version 2.99.29 with a bit less warnings,
	    and more usability -- it very nearly works at my
	    Laptop now...

Mon Jul 15 21:42:40 1996  Matti Aarnio  <mea@nic.funet.fi>

	* Makefile.in:
	    Releasing version 2.99.28 with dire warnings!
	
	* configure.in, configure, Makefile.in, ...
	  (nearly all files got touched!)
	    Using GNU-Autoconfig system

Wed Jun 19 15:18:03 1996  Ken Pizzini <ken@spry.com>

	* smtpserver/smtpserver.c, smtpserver/rfc821scn.c,
	  router/rfc822.c:
	    - SMTP-server dying with SIGALRM without cleanup
	    - Accept braindead SMTP-input, and correct it
	        "<foo@foo   >" (trailing white-space cleanup)
	    - bug in  router/rfc822.c  at recognizing the end of
	      the envelope headers, and begin of rfc822 headers
	      in case the line-end was  CR LF  instead of plain LF ..

Tue Jun 11 14:34:05 1996  Jerzy Sobczyk  <J.Sobczyk@ia.pw.edu.pl>

	* libsh/execute.c:
	    Change at the ENDGRANDCHILD() -macro to clean (reap) up
	    the intermediate child process from becoming a zombie.

Mon Jun 10 11:35:41 1996  Matti Aarnio  <mea@nic.funet.fi>

	* INSTALL:
	    Some additional documentation details as suggested by
	    Arnt Gulbrandsen.

	* smtpserver/smtpserver.c:
	    Revised a bit of message logging, and other things.
	    There were difficulties that manifested at Sun Solaris,
	    while same code worked at DEC OSF/1 :-(    (At Solaris
	    the server process simply died a horrible death..)

Tue Jun  4 18:52:08 1996  Matti Aarnio  <mea@nic.funet.fi>

	* libsh/interpret.c:
	    Removed one  setlevel(MEM_SHCMD,...)  that caused memory
	    to be freed too agressively in some cases, and which in
	    turn was able to corrupt memory, when it was taken into
	    use a bit latter:  for x in $(/bin/cat /etc/group); do ... ; done

Fri May 31 15:30:01 1996  Matti Aarnio  <mea@nic.funet.fi>

	* smtpserver/smtpserver.c:
	    Re-implemented the "TURNME"-command.  Apparently I have
	    misplaced the previous version source..  well, this is
	    cleaner code anyway.

	    Added an alias "ETRN" for the "TURNME".

	* lib/mail.c: mail_close_scheduler()
	    A variant of  mail_close()  routine, which sends the file
	    straight to the scheduler.  (For "TURNME")

Tue Apr 23 14:14:55 1996  Matti Aarnio  <mea@nic.funet.fi>

	* compat/sendmail/sendmail.c:
	    Add ignorance of "-B8BITMIME" into option processing...
	    (We do it always, no need to tell it at the call..)
	    (sendmail 8.7)

Mon Apr 22 08:15:20 1996  Matti Aarnio  <mea@nic.funet.fi>

	* scheduler/scheduler.c:
	    Got the  ``mytime()'' -server running also with Linux,
	    and all other systems that have at least an ability to
	    mmap() a file.

	    Implemented a ``_CF_TURNME'' primitive parsing.

	* smtpserver/smtpserver.c:
	    Implemented a "TURNME"-command, which produces ``_CF_TURNME''
	    primitive for the scheduler -- and sends it straight to there
	    without going via the router..

Fri Apr 19 16:13:34 1996  Matti Aarnio  <mea@nic.funet.fi>

	* transports/mailbox/mailbox.c:
	    At  putmail(), move the newline addition testing AFTER
	    the  appendlet()  processing.  That way the message is
	    always added at the end of the file, and only 0-2 newlines
	    are added after that at the end of the message -- if needed.

	    At least ELM got mystified with the earlier processing,
	    where the newlines were added at the front of the message.

	* scheduler/scheduler.c: (the "time server")
	    A bit more generic approach, works at at bit more platforms,
	    than only at OSF/1, and SunOS 4.1.x ...

Tue Apr  9 11:39:12 1996  Matti Aarnio  <mea@nic.funet.fi>

	* Makefile:
	    Released version 2.99.27

	* Makefile:
	    Add a ".PRECIOUS:" -tag for produced Makefiles, thus
	    avoiding destruction of them at some awkward moments,
	    when pressing "Ctrl-C" would delete one of them..

	* compat/sendmail/sendmail.c:
	    Option "-q" to take options (discarded anyway)

	* hostenv/AIX4.1:
	    Add "WAITPID=", and "ANSI_TYPES="

	* hostenv/Linux:
	    Added a warning about mmap() being broken in 1.2.x -kernels
	    (well, propably broken...)

	* hostenv/OSF1v3.2-Alpha:
	    Added "STDC_HEADERS=" -- for ANSI-C-headers

	* hostenv/SunOS4.1:
	    Added  "BZERO="

	* include/listutils.h, libsh/listutils.c:
	    newcell() is now a routine, and not a macro..
	    (In preparation of LISP-like guts rewrite..)

	* router/rfc822.c:
	    If the returned address reference has no protection info
	    (a NULL-pointed object), print out "-".

	* scheduler/scheduler.c: (and all others)
	    Changed all "time(&now)" to be "mytime(&now)",
	    and created a shared-memory server on which there is
	    a redularly running server at the other side updateing
	    system time into given variable, and the real scheduler()
	    can read that data.  Makes a lot less syscalls at the
	    scheduler (At SunOS 4.1 the  gettimeofday()  syscall
	    does take some 80 usec...)

	* scheduler/transport.c, scheduler/conf.c:
	    Implemented a "forkrate-limit", which blocks the fork
	    from happening, if over N fork()s have been done during
	    the same second.  The count does reset at the next second
	    for N more childs..  Default for the N is 10.

	    Create  flush_child()  routine to handle some of the awkward
	    non-completed outputs from the scheduler to the childs.

	* scheduler/qprint.c:
	    "Q-mode" at the reporting -- no reports in the traditional way.
	    Also avoid a null-pointer deferrence.

	* scheduler/scheduler.c:
	    Parse scheduler 'Q'-mode argument, handle gracefully the
	    main scheduler inner loop exit.

	* transports/mailbox/mailbox.c:
	    Move the mailbox-file time-stamp reset into after the write
	    of the time. (Linux has peculiar read-time stamping due to
	    unified-buffer-cache system.)

	* transports/libta/lockaddr.c:
	    FCNTL-locking -- for systems starved by the IO-capacity..
	    (INCOMPLETE!)

	* transports/smtp/smtp.c
	    Added "-P"-option to turn off the PIPELINING use.

	    Do unusual, and overwrite also the environment variables, when
	    updateing info-area at the memory image for the benefit of
	    BSD-derived systems where such data update is possible for
	    reporting program state outside.

	    Detect "#idle", and report it outside.

	    Working implementation of PIPELINING full-duplex mode for
	    the SMTP-protocol.

	* utils/makendbm/makendbm.c:
	    Support also the GDBM, if it is available, and no NDBM is.


Fri Feb  9 02:32:01 1996  Matti Aarnio  <mea@nic.funet.fi>

	* Makefile:
	    Releasing 2.99.26

	* README.UPGRADING:
	    Noted change in canned error message headers

	* smtpserver/rfc821scn.c:
	    Give a bit more meaningfull report for case of "<foo@foo.foo.>",
	    which is "spurious dot at the end of the address"..

Tue Feb  6 00:54:37 1996  Matti Aarnio  <mea@nic.funet.fi>

	* proto/forms/*, scheduler/msgerror.c,
	  transports/errormail/errormail.c:
	    Added third header tag:  "ADR" which expects to find
	    recipient address (to be placed into "to " envelope line)
	    in there

	* smtpserver/smtpserver.c, smtpserver/rfc821scn.c:
	    If the input to HELO/EHLO was syntactically incorrect,
	    always trap it!  Although don't always cause full abort..
	    Actually giving meaningfull report at each input, and
	    storing "Bad.HELO.Input" into "rcvdfrom" entry..

	* include/hostenv.h:
	    Macro  FILENO(x)  was revised a bit to work properly
	    on SunOS 4.1, which has the problem, need to revise
	    it for other systems, if need be..  (IF the STDIO file
	    descriptor is stored on a signed char, the default
	    propagation of an fd over 127 makes it NEGATIVE, which
	    causes some real trouble..)

	* lib/rfc822date.c: (Tom Samplonius)
		- gettimeofday() does not return timezone information on
		  most BSD systems as "...time zone information does not
		  belong in the kernel..".  Also, this call is redundant,
		  since timezone information is the already retrieved
		  struct tm

		- I removed the
			"if (prettyname) sprintf(cp+5, " (%s)", ts->tm_zone);" 
		  statement because it is contained in the else part of a
		  "if (prettyname) .." block and can never be executed.

		- I removed the NO_TM_ZONE stuff in the USE_BSDTIMEZONE
		  section.  This seems like a bad thing, however it seems
		  to be required by AIX 3.2 though.  I don't know whether
		  AIX 3.2 is actually still used, or whether newer versions
		  of Zmailer actually build on it.  AIX 3.2 may be able to 
		  use the tzname[] global variable to get the name instead. 


	* include/mailer.h, router/libdb/header.c,
	  smtpserver/smtpserver.c, scheduler/msgerror.c,
	  transports/errormail/errormail.c:
	    Added new  HeaderClass  object:  env-eof / end-end
	    (two spellings) which is intended to be the last
	    entry of the transport envelope headers.

	* include/ta.h, transports/libta/lockaddr.c,
	  transports/libta/ctlopen.c, scheduler/msgerror.c:
	    Routine  lockaddr()  uses now MMAP()ed memory
	    on systems where it is available.  Less syscalls
	    on low-power machines..

	* include/zmsignal.h:
	    Ah well... truly portable signal processing appears
	    to be rather elusive target.. Now Solaris, and some
	    versions of BSD work again.

	* libc/__fopen.c, libc/siglist.c:
	    Couple FreeBSD related patches from Tom Samplonius

	* libsh/builtins.c:
	    Don't remember what system it was, but got a report
	    of failing signal processing/wait()ing.  Altered
	    feature testing into hostenv/* -feature USE_UNIONWAIT ..

	* router/db.c, router/libdb/dbm.c, router/libdb/gdbm.c,
	  router/libdb/header.c, router/libdb/core.c,
	  router/libdb/ndbm.c, router/libdb/ordered.c,
	  router/libdb/search.h, router/libdb/unordered.c,
	  router/libdb/yp.c:
	    "db -c database-file" --> outputs the number of
	    elements in the database.

	    Also incorporated a bunch of Nicholas Briggs patches
	    (NIS -- USE_YP) for his environment.

	* router/functions.c:
	    Rewrote (minimized) the  rd_stability() related data
	    amount used at sorting..

	* scheduler/msgerror.c:
	    Small changes to get it better online with IETF NOTARY-WG's
	    report format..

	* scheduler/update.c, scheduler/scheduler.c:
	    Understands "#resync .." reqests, drops the
	    info pertained to the jobspec, and returns
	    to the problem sometime latter (via normal
	    job scan..)
	    
	* transports/smtp/smtp.c, smtpserver/smtpserver.c:
	    Implemented RFC XXXX of PIPELINING, which gives us
	    radical speed-increase on case the sourcing system
	    can do PIPELINING, and we have a need to transfer
	    a large number of recipients in envelope.


Tue Jan 23 11:49:58 1996  Matti Aarnio  <mea@nic.funet.fi>

	* transports/libta/lockaddr.c:
	    Reduce the number of systemcalls by one -- write
	    whole lock info in one go.. (instead of two)

Mon Jan 22 09:34:35 1996  Matti Aarnio  <mea@nic.funet.fi>

	* scheduler/transport.c:
	    Moved a piece of code to ``nonblocking.c''

	* transports/libta/nonblocking.c:
	    New file containing fcntl()s to turn file blocking
	    on and off..  ( fd_nonblockingmode() / fd_blockingmode() )

	* smtpserver/smtpserver.c:
	    - Added EHLO responce "PIPELINING"
	      (server-side was easy..)
	    - Made sure that if no RCPT TO:<> -addresses
	      are given, will issue an "550"-error at the
	      "DATA"-phase.

	* transports/libta/diagnostic.c:
	    Minimize the "ok"-case report size, as filling
	    pipe of the report-back channel does not help
	    at all to keep the system running at full blast..
	    (average report size has been 110-120 chars, and
	     the pipe-size is usually 4096..  It doesn't fit
	     as many reports as it fits jobs.)

	* include/zmsignal.h:
	    SIGACTION does not always have the luxury of
	    SA_INTERRUPT defined at the system includes
	    (odd at that.. but Solaris is odd anyway..)

Fri Jan 19 19:42:16 1996  Matti Aarnio  <mea@nic.funet.fi>

	* Makefile:
	    Release 2.99.25

	* include/zmsignal.h:
	    Changed the order of tested alternates, now:
		- BSDish SIGVEC stuff
		- POSIXy SIGACTION stuff
		- ... when all else fails.. (SVR3)
	    (BSD and POSIX interchanged -- because OSF/1 3.2 didn't
	     like SIGACTION stuff with SA_INTERRUPT, while Linux is
	     happy -- and SunOS 4.1 needs SA_INTERRUPTs..)

	* router/functions.c: rd_doit()
	    Made a mistake at pid-renaming scheme, which caused
	    errorneous results to flood systems, and even to kill
	    the scheduler, when filename length became obscenely
	    large -- overflowling a stack-allocated buffer, and ...

	* scheduler/update.c, scheduler/threads.c:
	    Use, and bookkeeping of  feed_child() had a ``one off''
	    error in them causing occasional scheduler/ta deadlocks.
	    (both waiting each other to tell more..)

	* scheduler/transport.c: feed_child()
	    Feed the child only when the  "proc->fed == 0", that
	    is, as we set the flag, (and thread_start() clears it),
	    we won't feed same message twice, and cause potentially
	    excessive "#DBGdiag " loggings..
	    (Messages are not lost, it just disturbs postmaster's
	     peace of mind..)

	* hostenv/SunOS4.1, hostenv/OSF1v3.2-Alpha:
	    Turn back on the "MMAP=" settings, lack of them
	    does hurt more, than they did themselves..

Thu Jan 18 11:25:50 1996  Matti Aarnio  <mea@nic.funet.fi>

	* include/zmsignal.h:
	    SunOS 4.1 uses sigaction() in posixy style (sometimes
	    at least), and thus the programs jammed in weird ways.
	    Autch...   Added  SA_INTERRUPT into sa_flags..

	* Releasing 2.99.24 to the public

	* libsh/interpret.c: findfreefd()
	    It did `fstat()' in a loop, which is a bit heavy to my
	    liking..  changed it to use  fcntl(fd, F_GETFL), which
	    at most platforms is quite light-weight indeed..

	* scheduler/transport.c: stashprocess()
	    Clear the procinfo structure when preparing to store process
	    info to it.  Had forgotten to zero one new variable in it,
	    and caused mysterious halt gridlocks at scheduling..

	* scheduler/transport.c: mux()
	    Because the select-loop can take ages at slower machines,
	    added  queryipccheck()  calls after each  readfrom()  call..
	    Now the responsivity to the management interface should
	    improve..

	* transports/mailbox/mailbox.c:
	    When delivering to a file, errors at the storing (filesystem
	    full, for example!) did ZERO-TRUNCATED the target file.. Oops..
	    (Existing file-size was looked up at lseek(fd,0,SEEK_SET)
	     position, which happened to be at zero, of course..)

	* transports/libta/warning.c, transports/libta/lockfile.c,
	  transports/libta/ctlopen.c:
	    Changes at error reporting to get rid of "Misformed diagnostics"
	    entries at the scheduler log..

	* transports/smtp/smtp.c:
	    Altered the log-file writing a bit, now each line
	    gets prefix of format:
		("%05d%c%05d",getpid(),randchar,seqnum++)
	    and the log should be  sort(1)able  to see all sessions
	    in happening order -- and sessions with reused pids should
	    have differing randchar anyway --> no two SMTP-sessions
	    should be intermixed within each other.

	* scheduler/scheduler.c:
	    The new ``-S'' option causes startup to be all synchronous,
	    and will not start scheduling before all of the queue is
	    read in.

	* scheduler/qprint.c, scheduler/threads.c, scheduler/mailq.c:
	    New queue report -- old one is suppressed per default.

	    ----------- sample -----------
bash# mailq -sQQ
0 entries in router queue: idle
70 messages in transport queue: working
smtp/*.de/0
                Threads: 6 Procs: 19/6 Plim: 19 Flim: 150 Rcpts: 47 Idle: 13
smtp/*.net/0
                Threads: 1 Procs: 1 Plim: 10 Flim: 150 Rcpts: 1 Idle: 0
hold/*/0
                Threads: 1 Procs: 1 Plim: 20 Flim: 150 Rcpts: 2 Idle: 0
...
Kids: 64   Idle: 48   Msgs: 67   Thrds: 20   Rcpnts: 128   Uptime: 1m16s
	    -------- end sample ----------

Tue Jan 16 13:04:08 1996  Matti Aarnio  <mea@nic.funet.fi>

	* transports/smtp/smtp.c: getmxrr()
	    Wrong analysis of MXes causing occasional core, and
	    deliveries to wrong machines..

	* router/rfc822.c: makeLetter()
	    After a  ``getline()'' do see if the input has a terminating
	    CRLF character pair. If it has, convert it to LF-only..
	    This makes system to process peacefully messages which have
	    CRLF at their line change, which certainly is not UNIX style..

	* scheduler/msgerror.c:
	    Minor case improvement into ``delivery expired without
	    diagnostics having been returned to the scheduler''
	    (caused most likely by an overfed transport-agent..)

	* scheduler/*:
	    Still more performance related tuning, and bug hunting
	    at vger.rutgers.edu -- now that small machine appears
	    to be able to push some 200 000 messages in a day (1..n
	    recipients of same message at same remote host count as
	    one message), and linux-related lists are flowing out at
	    furious rate..  :-)

	    Profiling does tell weird things :-)  Most of the time was
	    spent at   thread_linkin(), which took 2.3 ms/call, but
	    was called some 200 000 times..  Small change there speeded
	    it up to 0.3 ms/call, and it made cistrcmp() to top..

	* router/functions.c:
	   Altered multi-router locking mechanism a bit.
	   Now it will use format:  inode-pid
	   which should be unique within one machine.

Thu Jan 11 13:52:06 1996  Matti Aarnio  <mea@nic.funet.fi>

	* Makefile:
	    Release 2.99.24 -- into testing at vger at first..

	* hostenv/SunOS4.1, hostenv/OSF1v3.2:
	    Commented OFF the "MMAP" feature -- the systems can do it
	    just fine, but we need to see, if systems perform better,
	    when not using it... (low-memory machine problems)

	* transports/hold/hold.c, transports/errormail/errormail.c,
	  transports/smtp/smtp.c, transports/mailbox/mailbox.c,
	  transports/sm/sm.c:
	    Accept input of queued up multiple job descriptors, which
	    MIGHT meet an fatal input error so that the last entry does
	    not end with a '\n'.  Reject such an entry silently.

	* transports/smtp/smtp.c:
	    When getting a bunch of job-descriptors with host selector
	    on the input, and if the last reported diagnostic was a
	    "retryat" failure, do silently drop them, until the given
	    retry-time is reached.

	* transports/hold/hold.c:
	    Understand hold-definition: "ns:host.name.there/any" right..

	* scheduler/readconfig.c, scheduler/scheduler.c, scheduler/mailq.c,
	  scheduler/qprint.c, scheduler/scheduler.h, scheduler/threads.c,
	  scheduler/transport.c, scheduler/update.c
	    Radical changes at the scheduling algorithms..
	      - "ageorder" config flag: makes vertices within the thread
		to be kept, and processed in the order of spool-file ctime.
	      - "overfeed=NN" config flag: tells how many entries are fed
	        to the transport client in one go so that it may "eat from
		the pipe" for the job definitions.

	* scheduler/msgerror.c:
	    Make it to tolerate old (pre 2.99.22) errors, and thus allow
	    smooth upgrade from old system to the new one.

	* lib/prversion.c:
	    Year has changed, updateing copyright statements a bit.

	* include/hostenv.h, lib/loginit.c, libc/mail.c, libsh/interpret.c,
	  libsh/io.c, libsh/trap.c, router/functions.c, router/libdb/ordered.c,
	  router/libdb/unordered.c, router/rfc822.c, router/rfc822hdrs.c,
	  router/shliaise.c, scheduler/mailq.c, smtpserver/smtpserver.c,
	  transports/mailbox/mailbox.c, transports/smtp/smtp.c:
	    On some machines exceeding 128 FDs on the scheduler (or elsewere)
	    causes some rather fatal things to occur, namely the variable
	    storing the fd in the STDIO descriptor is signed char, while it
	    should be at least ``unsigned char'', or preferrably ``short''
	    ( SunOS 4.x .. )

Wed Jan  3 10:24:59 1996  Matti Aarnio  <mea@utu.fi>

	* proto/cf/rrouter.cf, proto/cf/canon.cf:
	    Got rid of ``UUCPACTION'' and ``BITNETACTION'', let them
	    be resolved via  $MAILSHARE/db/routes:
			.bitnet	smtp!some.old.relict
			.uucp	smtp!uunet.uu.net
	    (And if you REALLY have BITNET routing database, it can
	     handle  <foo@node.bitnet> just fine..)

	    Also commented away the  IN% -matching, which after all
	    was my local hack to handle VMS users coming to UNIX..
	    .. but as we are killing the VMS, there is no need for
	    that hack anymore ..

	* proto/cf/server.cf:
	    The quadprint() -routine needed a bit of an addition to
	    handle non-found user->fullname mappings -- using same
	    method as the mailbox uses when delivering:  If given
	    "UsEr" does not match, lowercase it, and try again.
	    (If lowercased version doesn't match, yield an error..)

	* scheduler/update.c:
	    Hunting up and down for accesses to invalidated memory
	    blocks, found one at the end of the  u_retryat()..

	* scheduler/msgerror.c:
	    Plugged memory leakage (strdup()ed string)

Sat Dec 30 02:33:23 EET 1995  Matti Aarnio  <mea@nic.funet.fi>

	* Makefile:
	    Releasing 2.99.23

	* router/router.c:
	    Added "nosyslog" variable, and "-S" option, which
	    together disable (per default) router from syslog()ing
	    everything to syslog in addition to some logfile used
	    per default...

	* transports/smtp/smtp.c:
	    Rearranged diagnostics reporting, now it will correctly
	    report the status of the connection problems in addition
	    to the interactive transaction problems.

	* scheduler/threads.c, scheduler/transport.c:
	    When feeding a task, clear "vtx->ce.pending" -flag,
	    thus having the queue-reports not to show spurious
	    "thread-/channelwaits"...

	* transports/libta/mime2headers.c, transports/libta/mimeheaders.c
	    Split it into two, and took friend's MIME-2 encoder into
	    it... not yet truly in use.

	* routers/, and scheduler/
	    Several fixes to get it to compile again at OSF/1
	    (well, I didn't compile EVERYTHING before releasing
	     2.99.22 ..)

	* Makefile:
	    Releasing 2.99.22

	* Large changes to  scheduler -- trying to make it
	  a bit smarter at the retry (whole thread retries)

	* Some IETF-NOTARY-changes to the scheduler, and transporters

	* router, scheduler, and smtpserver will now abort, if
	  they fail to write any content to their respective
	  ``pidfile''.

Fri Dec 15 15:54:44 1995  Matti Aarnio  <mea@nic.funet.fi>

	* transports/mailbox/mailbox.c:
	    Add a "setpwent()" just before looking up named user,
	    at least on SunOS4.1 (vis NIS) this apparently makes
	    difference ??

Sat Dec  2 03:05:36 1995  Matti Aarnio  <mea@nic.funet.fi>

	* transports/smtp/smtp.c:
	    Fixed the treatment of maxpref picking at the MX handling.
	    (Darren Kinley <darrenk@nds.fonorola.net>)

	* router/shliases.c, proto/cf/aliases.cf, proto/cf/standard.cf:
	    Looked into ways of making the duplicate removal once
	    again setting a global XXXX

Sat Nov 25 18:39:56 1995  Matti Aarnio  <mea@nic.funet.fi>

	* lib/rfc822scan.c, router/rfc822.ssl, router/rfc822walk.c:
	    Teached the syntaxes a new special token: "::" like
	    exists in the DECNET addresses..

Thu Nov 23 16:34:50 1995  Matti Aarnio  <mea@nic.funet.fi>

	* scheduler/msgerror.c, scheduler/update.c, scheduler/scheduler.c,
	  scheduler/scheduler.h, include/ta.h include/mail.h, all TAs,
	  transports/libta/diagnostic.c:
	    Altered error messages (and a couple other things) to match
	    more evenly with IETF NOTARY-WG's error report format, including
	    status codes, etc.  If old errors are fed to the scheduler, it
	    WILL crash!  See  README.UPGRADING  about 2.99.22 ...

Fri Nov 17 13:22:18 1995  Matti Aarnio  <mea@nic.funet.fi>

	* router/rfc822.c:
	    Changed rules on when to add "To:"/"Resent-To:" headers
	    at all...  If any "To:" or "Resent-To:" header exists,
	    DO NOT add "(Resent-)To:" -header.  Makes list expansion
	    a much more forgiving to humans..

	* transports/smtp/smtp.c, transports/libta/dnsgetrr.c,
	  lib/hostent.c:
	    - Randomize the order of MXes with same preferrence
	    - Randomize the order of A-records before connecting
	      to anywhere (multiple addresses on same host)
	    The goal is to distribute the load to all servers of
	    the target domain, when it lists multiple servers..

Fri Nov 10 12:54:30 1995  Matti Aarnio  <mea@nic.funet.fi>

	* Makefile:
	    Release 2.99.21

	* Updated: README.UPGRADE, INSTALL, Overview, README,
	           README.solaris, Config.osf1-funet, Config.solaris
	* Switched:  scheduler -> scheduler-old, scheduler-new -> scheduler

	* hostenv/FreeBSD-2.0:
	    Some minor tweaks by Tom Samplonius, we shall see how they
	    blend in..

	* include/hostenv.h:
	    Unconditionally include <sys/param.h>, to be used
	    elsewere to detect some system dependent things.

	* Config, Config.osf1-funet:
	    Using best C-compiler on AXP platform with hardest
	    optimization switches...  It makes compiler apparently
	    to halt sometimes, but after 3-4 CPU MINUTES, those
	    larger modules are compiled -- the result is truly
	    magnificent :-)
	    (That compiler does need substantial amounts of memory
	     to run, at least 200M to "ulimit -m" -- max memory size!)
	    A bit latter: Decreased optimization demands by small
	                  amounts -> smaller code (less inlining),
			  and faster compile..  A LOT faster..

	* lib/rfc822scan.c:
	    Tolerate a case where "\" ends the line on which we are
	    scanning tokens.  (PINE originates such sometimes?)

	* scheduler-new/threads.c:
	    Last (?) of the thread bugs fixed -- this one occurred
	    rarely at UTU.FI SPARC server.  Some sort of timing
	    thing, which turned out to happen very infrequently..

Mon Nov  6 12:09:28 1995  Matti Aarnio  <mea@nic.funet.fi>

	* smtpserver/smtpserver.c:
	    - Wrong code on "HELP" responces: 241, changed to  214
	    - EXPN and VRFY changed to demand HELO/EHLO before
	      being usable

	* hostenv/SunOS5.*:
	    Added the forgotten  "SVR4MNTENT=" -entry.

	* scheduler-new/
	    Still more hacking on all fronts (eh, source modules)

	* transports/libta/ctlopen.c:
	    Reset the ctlsticky's internal state in the begin of its use..

	* transports/mailbox/mailbox.c:
	    Do something with the  SIGALRM -- don't just SIG_DFLT it
	    (which means program aborting itself), rather use it to
	    break infinite wait on where you were (NFS lockf() )

	    Also reset the [re]uid to zero (root) before opening a
	    control file -- things work better that way..

	    Moved BIFF into the delivery loop, we shall see...

	* transports/smtp/smtp.c:
	    Still leaked SMTP connection file-descriptors, last one
	    plugged now ?  (on target host change..)

Mon Oct 30 11:52:34 1995  Matti Aarnio  <mea@nic.funet.fi>

	* transports/libta/mimeheaders.c:
	    Small change to MIME-2 processing (it is imperfect,
	    actually "broken", but lets not be too purists..)
	    Now a quoted token will not contain enclosing parents,
	    that is, "QUOTABLE)" -> "=?xxxx?Q?QUOTABLE?=)", and
	    not like it was:        "=?xxxx?Q?QUOTABLE)?=", which
	    breaks the headers really badly..

	* scheduler-new/transports.c:
	    Put  pipes_shutdown_child(tofd)  into suitable places
	    instead of  close(tofd),  because  socketpair() "pipe"
	    does break at normal close()...

Tue Oct 24 22:30:50 1995  Matti Aarnio  <mea@nic.funet.fi>

	* Released 2.99.20

	* include/ta.h, transports/*/*.c
	    Changed the way the  diagnostic() call works,
	    now the SMTP transporter can send a "retryat +NNN "
	    request.  It is used for rescheduling entire thread
	    for a bit latter time -- now fixed at 60 seconds.

	* scheduler-new/
	    Revised somewhat the internal logics, introduced
	    active use of "retryat" comminication primitive
	    from the transport agents to the scheduler.

	    Fixed (?) the timeout problem reported from Hongkong,
	    also fixed another "PROC NOT IN IDLE CHAIN", which was
	    caused by childs dying prematurely for some reason.

Wed Oct 18 09:10:07 1995  Matti Aarnio  <mea@nic.funet.fi>

	* Released 2.99.19

	* hostenv/*, scheduler-new/pipes.c, scheduler-new/transport.c,
	  scheduler-new/threads.c, scheduler-new/Makefile.in:
	    If the system can do a bi-directional pipe, at least
	    a socketpair(), we need only ONE fd per child.  Enable
	    by hostenv define  SOCKETPAIR=
	    (TODO: SysV has STREAMS-pipes, add support for them into
	           the  scheduler-new/pipes.c, then all three existing
		   methods are covered... )
	    ( scheduler-new/pipes.c  is a new module.. )

	* scheduler-new/threads.c, scheduler-new/transports.c:
	    Finally found (?) the reason, why running childs are lost,
	    and mis-calculated occasionally.  (It turned out to occur
	    most frequent with  error-channel, but had nothing to do
	    with any channels per se..)

	    Anyway, sometimes a child is killed, and the recovery
	    was mis-treated, but the reporting-fd still had data!
	    Thus every now and then, while a process was gone, but fd
	    (and thus a pid-slot) was still in use, and the process
	    was thought to be valid for "feeding a child", for example..

	* transports/smtp/smtp.c:
	    When doing close() due to change of host, or a final close, don't
	    just close(), do "QUIT" + close()!

Fri Oct 13 17:21:27 1995  Matti Aarnio  <mea@nic.funet.fi>

	* hostenv/IRIX53, router/prototypes.h, scheduler*/mailq.c:
	    IRIX-5.3 diffs from  Darryl Miles <dlm@r-net.u-net.com>

	* scheduler-new/
	    - Still more hammering at it with DEC ATOM-tools Third Degree :)
	      Now only memory leakages around are in the system libc! (Brr...)
	    [ well, new leaks introduced latter, but that is another story.. ]

Thu Oct 12 20:23:26 1995  Matti Aarnio  <mea@nic.funet.fi>

	* smtpserver/smtpserver.c:
	    Fixed an error in SMTP EXPN, and VRFY.

	* scheduler-new/
	    - fixed expiry processing (when multiple recipients exist for
	      the message)
	    - fixed process counters -- idle_cleanup() leaked pids..

Mon Oct  9 11:07:25 1995  Matti Aarnio  <mea@nic.funet.fi>

	* scheduler{,-new}/transport.c:
	    Improved (?) support for IBM AIX systems
	    (select() system call.)

	* include/hostenv.h, hostenv/*:
	    STDLIB= -> USE_STDLIB -> include <stdlib.h> in  hostenv.h
	    UNISTD= -> USE_UNISTD -> include <unistd.h> in  hostenv.h

	* router/rfc822.c, router/rfc822hdr.c:
	    Hide away (effectively removed) "resent"-processing, so that
	    if there are headers in there, no new "Resent-" headers are
	    added just because some "Resent-Message-Id:" -exists, but no
	    "Resent-To:"...

Wed Oct  4 15:15:03 1995  Matti Aarnio  <mea@nic.funet.fi>

	* Released 2.99.18

	* transports/smtp/smtp.c:
	    Two fixes to a case where system doesn't have working mmap()

	    One change so that report() routine tells more meaningfull info.

	* router/router.c:
	    Rid the USE_BSDGETPGRP, and use USE_BSDSETPGRP instead.
	    It is too much hassle to change all hostenv files to
	    handle this othervice..

	* scheduler-new/:
	    Hacking continues at all fronts, still there is some
	    discrepancy in between data-structure counters, and
	    values counted, when chains are traversed!

	    Now the scheduler has an option to create performace
	    monitor log:  -l logfile.name

	    The file looks like this:
		812819196 167223-3 0 12 ok smtp/ugcs.caltech.edu
		812819197 167227-1 0 11 ok smtp/udcf.gla.ac.uk
		812819212 167231-3 0 7 ok smtp/sci.fi
	    Columns are: - spool-file creation time (ctime)
			 - spool-id (filename)
			 - time difference from creation of spool file
			   to route file creation (secs)
			 - time difference from creation of route file
			   to delivery of the message (secs)
			 - what happened (ok/error/expiry)
			 - recipient channel/host

	* Makefile:
	    Better integration into the whole, I hope.
	    Someday soon the "scheduler-new" will be changed
	    to be "scheduler", and current "scheduler" becomes
	    "scheduler-old" ...

Sun Oct  1 15:57:39 1995  Matti Aarnio  (mea@oh1mqk)

	* Dumped 2.99.17 -- and a bit latter revised scheduler-new..

	* libsh/Makefile{.in,}: (Michael Thompson <mickey@diva.com>)
	    Fix to an awk script embedded into the Makefile.

	* scheduler-new/
	    It works !    Old configuration information is out of date.
	    There are still open issues, see associated commentary files..

Fri Sep 29 09:22:50 1995  Matti Aarnio  <mea@nic.funet.fi>

	* transports/smtp/smtp.c:
	    Odd, SMTP responce "552 permanent resource limitation"
	    did trigger ONLY an EX_TEMPFAIL, which caused retry..
	    Does now EX_UNAVAIL, which causes snappy reject.

Wed Sep 27 22:00:28 1995  Matti Aarnio  <mea@notebook.mea.utu.fi>

	* Makefile:
	    Changed subdirectory makefile re-generation method slightly.
	    Now if the production fails, it won't (I hope) scramble the
	    original file...

	* compat/rmail/Makefile, compat/sendmail/Makefile:
	    Install "rmail", and "sendmail" into $MAILBIN !
	    Let sysadm to add symlinks from where-ever the
	    original locations are to the $MAILBIN/ ..

	* proto/zmailer.sh:
	    The script will check that   $MAILBOX  points to a directory
	    so that the ZMailer can't be started on a mis-configured
	    system... (.. at least of that part.)

	* transports/libta/mimeheaders.c:
	    Recognize "KOI8*" -fonts as alias to US-ASCII, when content is
	    7-bit only..

	    Recognize also when HEADERS need MIME-2, that is, coding 8-bit
	    chars in headers (subject et.al.) into MIME-2 format..

	* transports/libta/writeheaders.c:
	    If converted headers exist, write them ALWAYS!

	* transports/mailbox/mailbox.c, transports/sm/sm.c,
	  transports/smtp/smtp.c:
	    Use  strdup()  instead of  strsave().  Makes difference,
	    when it occurs on a transporter waiting for next work..

	* transports/smtp/Makefile*:
	    For "install"-target, make sure also "mprobe" exists.

	* transports/smtp/smtp.c:
	    If headers have 8-bit chars, we may need to convert them to
	    MIME-2 (RFC-xxxx) "coded words"

	    If EHLO+HELO fails, open same machine again, and do HELO
	    only, if THAT too fails, try next MX...

	    Report (into log-file) about connection making, and
	    possible errors therein..

	* scheduler/
	    Lots of small changes - prototypes for functions.

	* scheduler/mailq.c,     scheduler/qprint.c,
	  scheduler-new/mailq.c, scheduler-new/qprint.c,
	  scheduler/scheduler.h, scheduler-new/scheduler.h:
	    Noticed that qprint on Linux didn't like at all the reported
	    vertices from AXP machine, where vertex storage address was
	    well ABOVE 4 G (max value for unsigned 32-bit long at i486..)

	    Now the vertex structure has a field where qprint() can
	    store incrementing SMALL integer unique one for each
	    vertex.  The vertex identifiers start now from 1 each
	    time the mailq is run...

	* scheduler-new/
	   The face-lift project continues, it CAN do most of the things
	   already, but it is somewhat sloppy at process scheduling, and
	   tracking.

Tue Sep 19 11:00:52 1995  Matti Aarnio  <mea@nic.funet.fi>

	* transports/smtp/smtp.c:
	    A set of options that change their values during the
	    runtime are reset before  smtpconn().

	    If  "EHLO"+"HELO"-pair crashes (like it does with some
	    SMTP-servers), open a new connection, and do "HELO" only.

Mon Sep 18 10:42:37 1995  Matti Aarnio  <mea@nic.funet.fi>

	* Makefile:
	    Dumped version 2.99.16 after public demand..

	* smtpserver/smtpserver.c:
	    Extended the trappings of errno's from  accept().
	    On Linux we have seen (among others)  ECONNRESET,
	    which earlier did cause swift exit(1), because
	    only EINTR was tolerated...  ( .. and incidentally
	    the EINTR didn't happen at all, because the signals
	    are of syscall-restarting nature..)

	* transports/smtp/smtp.c:
	    When writing to a log-file, write also info regarding
	    connection attempts so we can look when remote systems
	    are unreachable...

	    Fix the '-8' -flag when the message content isn't
	    MIME, but we want to be 8-bit transparent..

Sat Sep  9 01:13:20 1995  Matti Aarnio  <mea@nic.funet.fi>

	* scheduler-new/ :
	    The scheduler will have complete ``face-lift'',
	    before this is over...  Now made separate work
	    copy, and left 2.99.15 version with old name..

Sat Sep  9 01:04:55 1995  Eugene Crosser <crosser@online.ru>

	* transports/mailbox/mailbox.c:
	    More generic (?) approach of UID/GID handling, we hope.

	* router/libdb/search.h:
	    Changed one "void *" to "char *", because Sun Solaris
	    C-compiler (SparcWorks ?) didn't like to do pointer
	    arithmetics with void pointer..

Fri Sep  1 11:37:09 1995  Matti Aarnio  <mea@nic.funet.fi>

	* transports/smtp/smtp.c:
	    Thomas Knott spotted (and fixed) a bug on email processing
	    when sending 8-bit mail over an ESMTP connection, and the
	    system does not support MMAP service..

	* include/mailer.h:
	    Added macroes:  STREQ() and STREQN() (case SENSITIVE string equal)

	* router/rfc822.c:
	    The ``FindHeader()''-macro uses now case SENSITIVE lookup
	    of the header lines. Thus "From "-lines will not match those
	    of "from "..  (Nothing breaks, I hope..)

	* libsh/io.c: PUTC(), vsiodoprnt()
	    Two subtle one-off errors which DEC OSF/1 ATOM-tool
	    "Third Degree" detected. These caused actually buffer
	    overflows :-( (by one byte), which in turn caused
	    far latter errors, which looked rather weird..

	* scheduler/ - all files :)
	    Made prototype functions for all inter-twined routines
	    used in the scheduler, cleaned out several unused ones.
	    (Not yet doing things quite like I want, but better..)

	* hostenv/FreeBSD-2.0:
	    Contributed by Tom Samplonious.


Fri Aug 25 13:24:30 1995  Matti Aarnio  <mea@nic.funet.fi>

	* Release of code version 2.99.15
	  A big pile of changes all around, summary below:

	* Incorporated (finally!) Lehigh's AIX-port into the main source.
	  I don't know how clean it is, but...

	* hostenv/Linux, hostenv/OSF1v3.0-Alpha, hostenv/OSF1v3.2-Alpha:
	    Added "MMAP=", and "STRERRNO=" for Alphas, "STRERRNO="
	    only for Linux (on which the mmap() is a bit troublesome..)
	    Added also "RESOLV_LIB=-lresolv" to Alphas.

	* doc/zmdirs.{fig,ps}, doc/zmsched1.{fig,ps}:
	    Couple pictures telling about directory, and file relations
	    within the ZMailer.

	* include/sysprotos.h:
	    DEBUG_FOPEN -things for debugging FILE * leakage..

	* libauth/authuser.c:
	    Fixed variable declarations.

	* libc/__fopen.c:
	    Compile the library always, just the USE of it is left to user
	    applications compilation.

	* libc/strerror.c:
	    Verify that error number is in valid range -- detected
	    a case of errors where the returned errno was 8800+, and
	    got most peculiar error results...

	* libsh/execute.c:
	    Small changes to ensure compilability with multiple compilers;
	    apparently somehow the optimizers (gcc-2.7.0, and DEC's
	    "cc -migrate" both on Alpha) generated skewed code, which
	    produced wrong result.

	* libsh/tregexp.c:
	    The "trace regexp", and "trace matched" (I think) regexp
	    TRACE routines produced parts of their output to wrong place
	    (to stdout via  putchar() -routine) thus causing trouble when
	    trying to trace large-scale processing.  Now all output from
	    this file goes to some "char *" -buffers, or to stderr.

	* proto/cf/aliases.cf:
	    Had one split line, and other minor changes.

	* proto/cf/aliases3.cf:
	    Yet another slightly edited version of the default "aliases.cf"
	    (untested!)

	* proto/zmailer.sh:
	    The prototype of the "zmailer" -command got rid of vestiges
	    related to "$POSTOFFICE/scheduler/" -directory.

	* router/functions.c run_listexpand():
	    New option "-p", tried to use  "router()" -entrypoint, but
	    apparently it wasn't very successfull.  Hmm..

	* router/libdb/bind.c:
	    Problems related to 64 bit machine, where "u_long" is rather
	    much larger, than expected "u_int"'s size...

	* router/rfc822.c:
	    Changed directory scheme to match that of the scheduler by
	    getting rid of "$POSTOFFICE/scheduler/" -directory

	* scheduler/agenda.c:
	    Fixes on time-stamp processing, adding up-to-date code
	    into time handling -- setting all variables that are latter
	    read from.

	* scheduler/mailq.c:
	    Got rid of "$POSTOFFICE/scheduler/", and to some extend
	    replaced it with "$POSTOFFICE/transport/".

	* scheduler/msgerror.c:
	    Use new directory/file-paths.

	* scheduler/scheduler.c:
	    Use new directory/file-paths

	    Read files from the directory into time-stampted queue
	    (with file's st_ctime), and accept into it only those
	    that are not already in processing.

	    Parse _CF_SENDER -entries from the scheduled job, and
	    use that address (well, last one of them) as an address
	    for sending error replies to.

	* scheduler/scheduler.h:
	    Replaced "int rptwait" with "int hungry", though neither
	    are in use...

	* scheduler/transport.c:
	    Use new directory/file-paths.

	    Prepare for using bi-directional communication in between
	    scheduler, and transporters -- so that scheduler starts
	    a transporter, and gives it synchronously one job at the
	    time, and waits for "#hungry\n" -message before feeding
	    another...

	* scheduler/update.c:
	    Use new directories/file-paths.

	    Support "#hungry\n" -messages

	* smtpserver/rfc821scn.c:
	    Accept domain name components.

	    Increase the  listen()  queue size.

	* smtpserver/smtpserver.c:
	    Voice complaint, when user tries to feed us:
		MAIL FROM: someone@somewhere
	    that is, when the input is against the RFC-821 syntax..

	* transports/errormail/errormail.c, transports/hold/hold.c,
	  transports/mailbox/mailbox.c, transports/sm/sm.c,
	  transports/smtp/smtp.c
	    Support the new "#hungry\n" -style "feed me" messages.

	    Fixed a couple "if (foo = faa)" vs. "if (foo == faa)"
	    errors in the source.


Tue Jun  6 23:35:34 1995  Matti Aarnio  <mea@nic.funet.fi>

	* transports/sm/sm.c, transports/smtp/smtp.c,
	  transports/hold/hold.c, transports/mailbox/mailbox.c,
	  transports/errormail/errormail.c:
	    Amended acceptable command-entry format to be:
		spool/file/name [ \t host.data ] \n
	    This in preparation to alter scheduler to keep
	    TWO pipes open for each running transporter,
	    and to feed them ONE JOB at the time.

	    To achieve syncronization the report-back format
	    is amended with a blank line after the last responce
	    from entries in a file. (That is, an extra "\n".)

Sat Apr 15 02:05:18 1995  Matti Aarnio  <mea@nic.funet.fi>

	* transports/sm/sm.c:
	    Fixes on MIME QP-decode conversion mode.
	    Now QP-decode works right.

	    (Somewhat earlier..)
	    Added also couple lseek()s to that the message
	    is now processed with correct headers..

Sun Mar 26 20:56:22 1995  Matti Aarnio  <mea@hamsterix.funet.fi>

	* (almoast all files..)
	    "A bit" more of 64-bit stuff.
	    A change on  splay-tree symbol format caused severe
	    repercussions to occur, namely a widely-held assumtion
	    that "sizeof(void*) == sizeof(int)" caused serious trouble :-(

Thu Mar 23 00:56:05 1995  Matti Aarnio  <mea@hamsterix.funet.fi>

	* transports/libta/ctlopen.c ctladdr():
	    A bit more generic way to scan for control addresses...
	    a way which does not miss the beat when there is 8-bit
	    chars on tokens...

	* router/functions.c:
	    Re-arranged the usage/setting of  errors_to -variable.
	    Now it should not cause spurious errors on free()-time!

	* transports/mailbox/mailbox.c putmail():
	    Parametrize putmail() with "w" (for pipes) and "a+"
	    (for files).  OSF/1 3.2 had problems when pipe was
	    fdopen()ed with "a+"... :-/

	    Instead of using  getservbyname("biff","udp"), do hard-wire
	    the BIFF-port to the client -- sometimes (SunOS 4.1.3 w/ NIS)
	    that library call is extremely SLOW to return...

	    A SCO-user reported, that MMDF-format is:
		C-A C-A C-A C-A
		message1
		C-A C-A C-A C-A
		C-A C-A C-A C-A
		message2
		C-A C-A C-A C-A
		...
	    Instead of (like it was coded here):
		C-A C-A C-A C-A
		message1
		C-A C-A C-A C-A
		message2
		C-A C-A C-A C-A
		...
	    Oops about that...

Thu Feb  9 20:28:22 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Dump 2.99.13

	* router/rfc822.c makeLetter():
	    Process all headers, don't just SQUIRREL() away
	    when there is mal-formed envelope information.
	    This way the messages will not just disappear
	    into $POSTOFFICE/postman -directory.

	    One particular bogon format is perhaps detectable..
	    ">From ..." as the FIRST line.  Such case is possible,
	    when a faultly configured  sendmail/smail  feeds
	    our system via SMTP, but is configured to feed UUCP..

	* scheduler/transport.c:
	    Changed all references to number of open files in
	    the system to use common reference platform from
	    library call  resources_query_nofiles().

	    This mattered especially when the  cpids[]-array was
	    allocated by using   resources_query_nofiles(), and
	    other references to it were limited by  FD_SETSIZE
	    (for example), but THAT happened to be larger (like
	    2 or 4 times) than the allocation size...

Wed Feb  8 00:51:59 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/smtp/smtp.c:
	    Yet one more loose thread on the SMTP connection closure
	    survivability.  (Detected by an SIGSEGV on NULL ptr..)

	* transports/mailbox/mailbox.c main():
	    New option: "-h 'hostname'"
	    Assists the success with scheduler configuration containing
	    "byhost", when scheduling this piece of email.
	    (Such scheduling may be used to run "Zillions" of parallel
	     mailboxes -- "maxchan=20, maxhost=1, byhost", and thus
	     have each email recipient processed individually.
	     This REQUIRES that the router stores something personal
	     to each recipients "host"-field, not just "-"...)

	    When this option is not used, it defaults to the original
	    behaviour, where "mailbox" delivers ALL "local/*" -channel
	    emails of the file during one invocation.

	* transports/libta/ctlopen.c ctlopen():
	    Revised a bit the "Cannot open control file..." -message
	    by removing a potential `printf("%s",NULL);' -case..

	* libc/myhostname.c:
	    An extra indirection causing  getmyhostname() to yield
	    wrong data in place of FQDN hostname...
	    Hmm..  Wrestling it to be more commonly available,
	    (various platforms) was a bit difficult -- even inbetween
	    SunOS and Solaris-2..

	* transports/smtp/smtp.c:
	    Rewamped the connection tear-down code.  Now it SHOULD
	    happily use same connection for multiple emails.

Tue Feb  7 00:47:26 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Dump 2.99.12

	* scheduler/scheduler.h, scheduler/scheduler.c, scheduler/agenda.c,
	  scheduler/transport.c:
	    Actual long-standing (ever since 1.0 ?) problem was the usage
	    of wrong filepath in the transport.c:tscan(), but without
	    some external help, the right one was not available..
	    (Scrambled especially the "-s" option!)

	    For fixing it was necessary to realize, that
		1) Each file is scheduled only once for each thread
		2) thus can be created a pointer into CTLFILE-block
		   which points to the CURRENT thread-vertex
		   (a companion for "mark" used for tscan() )
		3) the current vertex pointer can now contain an entry
		   to the path where the file is linked to
	    With these pointers in places,  transport.c:tscan()  and
	    after it, the client scheduling, can finally be done reliably.


	* scheduler/scheduler.c, scheduler/transport.c:
	    Once more, re-wamped the SIGCHLD processing, as
	    2.99.11 generated scheduler zombies on SunOS 4.1.x

Mon Feb  6 03:33:03 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Dump 2.99.11

	* scheduler/transport.c:
	   The  waitandclose() is called when the file-descriptor
	   is closed, or the read causes an error.  (EINTR is no
	   error..)

	* libc/getopt.c:
	    Wrong system-wide definition file -- must be "hostenv.h"
	    instead of "libsupport.h"..

Sun Feb  5 03:12:02 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* scheduler/resources.c:
	    sysconf()-calls appear to be problematic -- on Solaris
	    it yields wrong data :-/

	    Wow, must check if scheduler uses stdio anywhere,
	    if not, it can run (On Solaris) 1024 fds..

	* scheduler/{transport.c,scheduler.c,scheduler.h}:
	    Defined "USE_SIGREAPER" in the  scheduler.h, and
	    when it is defined (no reason to take it off ?)
	    uses wait() immediately on the childs, and if
	    it matches to actual transporter child, marks
	    it as reaped on  cpids[] -array.
	    End of "Scheduler Zombies" ?

Sat Feb  4 17:34:14 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* hostenv/00README, include/libz.h, include/mailer.h, lib/pwdgrp.c:
	    Inverted the test, and changed the variable name..  Now if we
	    ever DO need to use our own version of  getpw{nam,uid}() and
	    getgrnam(), we can define  ZGETPWNAM on the host environment.
	    I doubt we ever do.  (This change removed one COMMON problem
	    on porting to other platforms..)

	* transports/smtp/smtp.c:
	    Revised the timeouts.  Now output will abort if it can't
	    write at the rate of 1kB/5 minutes, rearm after every kilobyte.
	    If commands don't respond within 5 minutes (earlier was 10 minutes)
	    it also timeouts -- except with "." to "250 OK", which is 10 mins.
	    ( RFC 1123 )

	* smtpserver/smtpserver.c:
	    Timeout parameters, now it dies out pretty fast if the
	    remote end does not feed data in fast enough...
		20 minutes for in between SMTP commands
		10 minutes for a kilobyte of SMTP DATA.

	* smtpserver/smtpserver.c mgets():
	    Something funny with responce buffer realloc(); It did scramble
	    the pointer to the chars in the buffer (GCC 2.5.8 on SPARC),
	    and eventually caused a SIGSEGV..  Amazingly small change
	    fixed it :-/

	* A LOT changes right and left, NATIVE port to OSF/1v3.0 on Alpha.
	  Files affected:
		Config.osf1, hostenv/OSF1v3.0-Alpha, lib/rfc822date.c,
		compat/sendmail/sendmail.c, libc/getopt.c,
		include/authuser.h, nclude/limits.h, include/mailer.h,
		libauth/authuser.c, libauth/authuser.h, libmalloc/assert.h,
		livmalloc/externs.h, libsh/execute.c, libsh/interpret.c,
		libsh/sslwalter.c, libsh/trap.c, router/libdb/bind.c,
		router/db.c, router/functions.c, router/prototypes.h,
		router/rfc822.c, router/rfc822hdrs.c, router/router.c,
		scheduler/mailq.c, scheduler/msgerror.c, scheduler/update.c,
		scheduler/scheduler.c, scheduler/transport.c,
		smtpserver/smtpserver.c, transports/mailbox/mailbox.c,
		transports/smtp/smtp.c

	* (no file):
	    Noticed that Rayan Zachariasen no longer has an account on
	    U of Toronto.

Thu Jan 19 02:34:02 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Makefile:
	    Patchlevel=10, DUMP

	* transports/smtp/smtp.c main(): 
	    Fixup of parameters of the  getopt() call.

Wed Jan 18 13:29:50 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* router/functions.c run_listexpand():
	    When "rrouter" evaluation meets a duplicate removal,
	    it returns a list of "()" -- so, an object without
	    contents.  (Again SIGSEGV..)

	* libc/mail.c mail_close():
	    When ZENV-variable  ROUTERDIRS does have invalid elements,
	    use the last valid element (or the default of "router")
	    as the directory name.
	    ( "sendmail", and "smtpserver" are affected by this! )
	    ( Sure, nobody enters invalid elts into the dirlist ? Heh.. )

	* transports/smtp/smtp.c writemimeline():
	    Did wrong thing, when outputing QP coding, had a one-off
	    with "column" variable, when it was a question about
	    line prefixing "."...  (Auch!)

Tue Jan 17 10:53:02 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* hostenv/Linux, hostenv/SunOS5.3:
	    "GETPWNAM=" -- MUST BE DEFINED, as the otherwise default
	    of iterating with  getpwent() is BAD MEDICINE!
	    This has been the reason for several odd problems on POSIX,
	    and alike, systems!
	    ( "include/mailer.h"  has "#define getpwname zgetpwnam" to
	      map the normal library call to ZMailer wrapper.. )

	* scheduler/scheduler.c:
	    A missing "int wrkcnt;" variable declaration..
	    (How on earth it did slip into the dump ?)

Fri Jan 13 13:59:07 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Makefile:
	    PATCHLEVEL=9, dump for public tests.

Thu Jan 12 12:31:02 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* router/functions.c:
	    When the  $ROUTERDIRS  is defined, but not all dirs
	    in it do exist, skip the nonexistent ones.
	    (It was FAST core-drop time at nic.funet.fi ..)

	* Makefile:
	    When cleaning, DO NOT delete libmalloc/version.c !
	    That file is separate from all other version.c's !

	* router/router.c main():
	    Altered XMEM-compile-option related usage of "fileno()" macro.
	    Actually got rid of it...

Wed Jan 11 14:22:14 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* router/rfc822.c run_rfc822():
	    Open the mail-file as O_RDONLY ( fopen(file,"r") ) instead of
	    "r+" (O_RDWR), thus under no circumstances allow our internal
	    bugs to cause leakage of logs (!) into the mail-body !
	    (Original code claimed the "r+" is needed for locks to succeed,
	     however  link()/rename() -"lock" works quite well without...)

	* scheduler/scheduler.c, scheduler/transport.c, man/scheduler.8:
	    A runtime option "-N ##" to set how many file-handles
	    are to be left open when a client is started.  On most
	    systems that number is low -- under 10 or so, however
	    on Solaris it must be far higher..   Default value (32)
	    works for me (on Solaris), however I have had comments
	    that it isn't enough (on Solaris) :-/

	* router/functions.c run_listexpand():
	    Changed somewhat the address parser -- finally (?) got it right!

	* router/rfc822hdrs.c pureAddressBuf(): (NEW)
	    Outputs pure address into a buffer for usage as router argument.

	* router/libdb/ordered.c, router/libdb/unordered.c, router/db.c:
	    - Moved  readchunk()  to the end of the  .../unordered.c from
	      router/db.c
	    - Teached "db" to flag a case of using "Indirect" post-
	      processor for things other than ordered/unordered relations.

	* libmalloc/, (libmalloc-o/)
	    Mark Moraes'  malloc-1.17.
	    The previous one is in  libmalloc-o, until deleted..

	* transports/smtp/smtp.c, transports/sm/sm.c:
	    When translating to QP, always translate
	    the last SPACE/TAB on the line.

	* transports/libta/mimeheaders.c  check_conv_prohibit():
	    Added another KLUDGE meaning to the "Content-conversion:"
	    header... "forced-qp", which forces QP output.
	    (Applied only into SMTP so far..)

Tue Jan 10 13:46:33 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* smtpserver/smtpserver.c:
	    Analyze headers a bit more.  Now complain immediately,
	    if subjected to 8-bit characters in any header aside of
	    "Subject:".  (Because for example PP will choke on us,
	    when we forward such a message and there is no MIME-HDRS
	    encoding on them..)

	    We can't (easily/portably) do the MIME-HDRS encoding for
	    the user, because we don't know his/her character-set.
	    (We can assume, of course, but it would not be universally
	     usable..  Hmm..  UNKNOWN-8BIT ?)

	* transports/sm/sm.c:
	    New option: -Q to create "narrow-QP-encoding", that is,
	    to encode TABs and SPACEs in QP.  Without this the QP-encoding
	    is created leaving them untouched..

Mon Jan  9 16:16:36 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transporter/mailbox/mailbox.c:
	    If the host does not have  /var/spool/rwho/ -directory,
	    DO NOT complain about it (with exit()!) Failing to RBIFF
	    is NO fault!

	* scheduler/transport.c:
	    Before bind()ing  querysocket, do set  SO_REUSEADDR, so
	    it won't complain just because of old lingering connection
	    trails...

Sun Jan  8 22:26:35 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* router/functions.c, router/rfc822.c:
	    Restore my old (and cumbersome)  "errors_to"  trick
	    on list expansion.  Even though it causes the error
	    address for ALL messages cascading from one source
	    to expand into the LAST expansion's owner, it is better,
	    than no trap at all..  (the rfc822.c:sequencer() needs
	    a serious rewrite with those attributes..)

Fri Jan  6 01:59:09 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Makefile:
	    Patchlevel: 8

	* router/functions.c: rd_{in,}stability(), run_daemon():
	    Revised a bit when it became evident, that the
	    multi-directory picking did not work anymore.

	* smtpserver/smtpserver.c:
	    Process the incoming message for headers.
	    Set "mail_priority" according to what you find
	    on the (possibly) existing "Precedence:" -header:
		- (nothing)	0
		"bulk"		1
		"junk"		9

	* doc/draft-*:
	    Pulled in new IETF SMTP related drafts (and some other)

	* README.UPGRADING:
	    Noted a change on 2.98 when the   proto/cf/*.cf -files
	    were altered to have a new way of processing the
	    "thishost" relation from $MAILVAR/db/localnames -file.

	* smtpserver/smtpserver.c:
	    "-M ###" -option: Absolute maximum (size) ever accepted
	    Code reorganize (a bit), load-aver blocked-access code
	    "421" instead of "400".

	* hostenv/*, libsh/execute.c, scheduler/transport.c,
	  smtpserver/smtpserver.c:
	     WAITPID coding for POSIX.1 waitpid() with WNOHANG ..

Thu Jan  5 00:28:45 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* libc/getzenv.c, libc/mail.c, libc/whathost.c, router/functions.c,
	  router/rfc822.c, router/router.c, scheduler/mailq.c,
	  scheduler/msgerror.c, scheduler/update.c, smtpserver/smtpserver.c,
	  utils/listexpand.c, compat/rmail/rmail.c, compat/sendmail/sendmail.c,
	  transports/errormail/errormail.c, transports/libta/ctlopen.c, 
	  transports/smtp/smtp.c, transports/libta/diagnostic.c,
	  transports/libta/lockaddr.c, transports/libta/markoff.c,
	  transports/mailbox/mailbox.c, transports/sm/sm.c, 
	  transports/hold/hold.c:
	    Converted to use   #include "mail.h"  instead of
	    the previous  #include <mail.h>

	* smtpserver/smtpserver.c, lib/detach.c, lib/loginit.c,
	  libauth/authuser.c, libsh/execute.c, libsh/trap.c,
	  libsh/zmsh.c, router/functionc.c, scheduler/scheduler.c,
	  compat/sendmail/sendmail.c, transports/hold/hold.c,
	  transports/errormail/errormail.c, transports/sm/sm.c,
	  transports/mailbox/mailbox.c:
	    Converted to use the new  "zmsignal.h"

	* include/zmsignal.h: NEW FILE
	    Created a file with all the signal handling that
	    various programs appear to need:
		SIGNAL_HANDLE(SIG,HANDLER)
		SIGNAL_HANDLESAVE(SIG,HANDLER,SAVEVAR)
		SIGNAL_HOLD(SIG)
		SIGNAL_RELEASE(SIG)
		SIGNAL_IGNORE(SIG)
	    (..	and  "#define SIGNAL_TYPE void" if it is not defined
		when using this header file --  libauth/authuser.c ! )

	* transports/smtp/smtp.c appendlet(): 
	    When decoding MIME QP on flight we MUST prepare to
	    meet pathologic input, namely a last line with
	    trailing "=" (so, no trailing "\n" ...)
	    When that occurs, we must inject the "\n"..

	* router/functions.c: run_listaddrs(), run_listexpand():
	    Changed (a bit) of the error message those two
	    can mail out.  "From: Error Channel  <MAILER-DAEMON>",
	    and "Precedence: junk".

	* scheduler/msgerror.c scnotaryreport(): 
	    Changed the function name -- clashed with libta.a ..
	    Made sure it becomes called only when there is real
	    NOTARY-DATA available, not in a case when the NOTARY-
	    DATA is "" ...

	* lib/rfc822scan.c, router/shliase.c:
	    Been wrestling with proper procedures for handling
	    one particular errorneous address ("From:" -line)
	    which used to cause router coredump..

	* transports/mailbox/mailbox.c:
	    Got a report that the new MAILVAR-misconfig-reporter
	    misses a case of valid  MAILVAR when the user does not
	    (yet) have a mailbox file in the mail-spool.  Hmm..
	    (Have not been able to reproduce this SunOS 4.1.3U1
	     reported error on my Solaris, have to try SunOS yet..)

	* libsh/interpret.c fapply():
	    When analyzing argument list (lisp-list), used wrong
	    data source for the for-loop continuation..
	    (Affected  "runas"  facility running "filepriv"...)

Mon Jan  2 00:03:33 1995  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* transports/hold/hold.c:
	    From way back in history a "hold/home" -condition,
	    though I am not sure it really is that usefull.

	* Makefile:
	    Patchlevel: 7

	* README.UPGRADING: (new file)
	    Made some notes on what changes the ZMailer has had
	    during its evolution, and thus what things users should
	    be aware when upgrading from the previous versions.

	* router/libdb/ordered.c:
	    Removed the "seq_remap()" from here too.

Fri Dec 30 23:36:03 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Makefile:
	    Patchlevel: 6

	* Dependencies:
	    Changed the order of *dbm -entries.  The lattest GDBM (1.7.3)
	    has compability functions with DBM and NDBM.  Thus their
	    linkage-order can be used to chooce which *DBM is really used.
	    (And especially if there is a wish to use genuine NDBM in
	     parallel with GDBM!)

	* router/libdb/gdbm.c, man/router.8:
	    Updated it truly to GDBM 1.7.3, and sent wishfull thoughts
	    to the bug-gnu-utils@prep.ai.mit.edu  for a real  gdbm_filefno()
	    function...  The present one is, well, err...
	    Added a few words of advice to the man-page of the router.

	    Using GDBM from a non-standard include/library location is
	    a bit painfull, having following kind defines on hostenv/XXX
	    may help:
		GDBM_INCL=	-I/opt/gnu/include
		GDBM_LIB=	-L/opt/gnu/lib -lgdbm
	    (The example assumes your GNU-things are on  /opt/gnu/ ..)


	* hostenv/Ultrix*, libmalloc/getmem.c:
	    Defined a  NO_MADVICE  cpp-define to have USE_MMAP usable on
	    Ultrix 4.3A (well, I am guessing, I don't have the machine).
	    On a case I got a report about, the system does not have
	    madvice(2) while <sys/mman.h> has defined MADV_RANDOM, why ???
	    Some odd library to be included ?

	    I DO NOT KNOW IF Ultrix3.* HAS MMAP() AT ALL!
	    It is historic stuff anyway, which nobody uses anymore, right ?

	* router/libdb/unordered.c, man/router.8:
	    Disabled/removed  seq_remap() and its associated  fstat()
	    call.  It is better to use "-m" on the relation definition.
	    (Documented it, as if it would be enough to teach people..)

	* libsh/trap.c:
	    Changed the message of pre-compiled FC-file magic mismatch
	    into something which is clearer - I hope.  It reports about
	    automatically recompiling the CF files to FC files, nothing
	    else.

	* smtpserver/smtpserver.c, smtpserver/Makefile, smtpserver/fdstatfs.c:
	    Localized all  *stat*fs()  versions into one file, which now
	    returns valid (?) data for the most systems that are around.
	    (Prompted by "Yet Another Special Case" -- Ultrix..)

Thu Dec 29 08:31:42 1994  Matti E. Aarnio  (mea@oj287.astro.utu.fi)

	* Makefile:
	   Patchlevel: 5

	* smtpserver/smtpserver.c:
	    Gives "a bit" mystic result-codes when the EHLO
	    responce generation procedure is unable to create
	    a mail-spool-file  -- it was used earlier to
	    determine available free storage, but when I became
	    informed that using it in the "SIZE" code would mean:
	    "this server will never accept more than this size.."
	    which for such a dynamic quantity is clearly wrong..

	* transports/smtp/smtp.c:
	    Leaked file-descriptors -- the SMTP channel connections..
	    ( smtpopen() leaked them, to be precise.. )

	* Makefile:
	    Patchlevel: 4

	* transports/smtp/smtp.c, transports/sm/sm.c,
	  transports/mailbox/mailbox.c, router/libdb/unordered.c:
	    The case of NOT having  USE_MMAP  had things missing
	    (being non-tested, but one Ultrix version was done with it..)

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

	* 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...
	    (On some platforms there is a behaviour where former
	     would not start 10 routers, only one, while the latter
	     would start all 10.. -- On Solaris 2.3 it works with
	     both ways, SunOS 4.1.3 (I think) had problems. )

	* 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.. )
	    (Yes, correct one: "421")

	* 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 :-)

	    => Rendered the  util/listexpand.c  obsolete...

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,
	    otherwise 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..	)
	    (1-Jan-95: Most likely it is Open-Files resource limitation..)

	* 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:
	- zmailer(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 zmailer(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  zmailer(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 (zmailer(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
