CHANGES between the current beta (1.4) and the last
stable (1.3) version of Mathopd.

A ScriptUser can be defined in a control block. Mathopd will
change its identity to that of the ScriptUser right before
execution.

Scripts can still be run as the owner of the script. This
is governed by the RunScriptsAsOwner parameter (set to 'On'
to enable the old behaviour.)

Note that ScriptUser overrides whatever value is active
for RunScriptsAsOwner, and that no scripts will be run
if neither variable is set and the server is run as root.

LogFormat keyword has been added to generate custom log
formats. See config.c for details.
Thans to Peter Leven for suggesting these changes.

Never return a 403 error code, except if the client's IP
address is explicitly denied access.

Symlinks checking removed; it seems impossible to do
this safely so we might as well dump it.

Do not log a timeout if a client disconnects after the
timeout period.

Always open() any file requested. If a file's mtime is
equal to or less then the If-Modified-Since value, but
we do not have read permission on the file, return an
error rather than a 'not modified.'

Return 404 rather than 400, if check_path() fails.

Do not open a custom error file if the request method is
HEAD.

The configuration file can now be specified on the
command line rather than fed through standard input.

Standard input, output and error are not closed
if mathopd is started with the -n flag.

ASCII NUL characters are not allowed in HTTP
headers, as these might upset the various
string-handling routines.

If mathopd is started with the -n flag, diagnostic
messages are logged to standard error as well as the
ErrorLog.

The Refresh keyword has been removed. The Refresh:
header is not defined in HTTP/1.1.

The DefaultName keyword has been removed.

REMOTE_PORT and SERVER_ADDR environment variables are
available to CGI scripts.

For CGI programs invoked via 'External' specialties
PATH_INFO and PATH_TRANSLATED point to the request-uri
and the physical pathname of the script respectively.
This appears to make more sense.

SCRIPT_NAME is now just the pure script name, without
extra info past a trailing slash.

The base64decode function now uses a macro rather than
a kludgy function.

System header files are included in individual source
files rather than mathopd.h.

Added REMOTE_USER CGI variable.

Modified get_path_info to not search past the beginning
of the assigned server directory.

A new keyword, AllowDotfiles, has been added.

A new keyword, AnyHost, has been added. AnyHost can be used
to indicate that a virtual server matches any host name sent
by a client. Virtual servers that explicitly match servers
with a host name take precedence of course.

Mathopd no longers adds server name and protocol in
Location: headers. This probably violates the HTTP RFC
but most browsers do the right thing anyway. Also this
makes it possible to put mathopd behind something like
stunnel and still get redirections to work.

In image maps and redirect files, the user is now responsible
for '%'-escaping URLs if needed. Previously this was done
by the server. The old behaviour made it impossible to put
URLs with query strings in imagemaps etc because the '?'
character would be converted to '%3f'.

The server now emits an error message if it cannot open
any log files.

For systems that do not have the poll() function an attempt
has been made to emulate this using select(). This means that
mathopd will only run fast if you have poll(). (Which should
be the case on any platform nowadays.)

The REQUEST_URI variable is now set in CGI scripts.
The log buffer is allocated in such a way that overflow of log file entries
should no longer occur.

A 'userdirectory' keyword has been added. It can be used
to implement user directories. See the sample configuration
file for an example. Note that Mathopd does not try to do
any clever username-to-homedirectory caching or similar so
if you use this feature you may see a significant performance
drop.

There is no more restriction on the length of a token in
the configuration file.

Time stamps in the log file, including the name of the logfile
itself, can be set to GMT, rather than the local time.

Mathopd will now rotate log files automatically every hour.

The Redirect specialty has been removed.

Mathopd expands the '*' character to the value of the 'Host' header
in Location keywords. This makes it possible to add virtual servers
to mathopd without restarting.

Mathopd will now log the Host name sent by the client rather than
the name of the host file as it appears in the configuration file.

A new keyword 'PutEnv' has been added to export environment variables
with predefined values. Use it as follows:

  Control {
    # other bits
    PutEnv { FOO=BAR }
  }

the above will always set an environment variable FOO with value BAR
in all child processes.

