CHANGES
=======

This file summarizes bug fixes and changes to the commands
for different versions.
Please refer to src/ChangeLog for a detailed log of changes


Known Issues
------------

- On Windows, when running mod_websh against Apache 1.3.41,
  [web::config server_root] returns garbage (won't be fixed)

- On Windows, mod_websh sometimes crashes with Tcl 8.5 and Tcl 8.6
  in Apache 2.0 or greater.


Trunk
-----

- Removed a few assigned but unused variables to allow newer compilers
  to successfully compile with -Wall and -Werror

- Apache tests can now run with httpd 2.4 and are cleaned up to run
  repeadedly if needed. Also server is only started once by default

- Added --with-apr and --with-apu to allow more flexible configuration
  with configure

- Fixed Web_InterpCfg_AP and Web_InterpClassCfg_AP in modwebsh_ap.c
  (potential segfault for invalid parameters)

- Improved apachetests to deal with included conf files

- Parse x-www-form-urlencoded forms also if charset is given

- Improved configure.in and Makefile.in for Unix builds

- Remove redundant log in web::decryptd

- Made -Wall happy when compiling on Unix (removed unused vars etc.)

- Some reformatting, typo fixes and consistency improvements in quickref


Websh 3.6.0b5 (2009-09-14)
--------------------------

- Fixed some memory leaks and improved refcount handling in general

- Improved test suite to be able to run repeatedly

- Improved/streamlined Tcl_InitStubs handling

- Added [web::config safelog] configuration to allow web::log to properly
  throw errors if I/O fails (if safelog is set to 0). Default is 1 to ensure
  backward compatibility.

- Fixed log handling for logtochannel plugin: reliable channel handling

- Added simple pkgIndex.tcl to installation

- Bug fix in web::cmdurl when using -urlformat

- Dynamic linking of libwebsh.so|dll to websh binary and mod_websh.so

- Improved Cookie handling (deal with unusual format)

- Enabled mod_websh tests for Windows platform
  (Use 'nmake apachetest' to test mod_websh within Apache under Windows)

- web::request now provides AUTH_USER and AUTH_PW if Authorization 
  header is sent, and Apache does not handle it (i.e. does not provide 
  the REMOTE_USER variable). Refer to the quick reference for an 
  explanation about how to make it work in CGI.

- Revamped mod_websh tests: better directory structure and integration
  into src/unix/Makefile: 'make apachetest' now runs the test suite

- Compiles with Tcl 8.6

- Minor documentation fixes

- Fixed test and install targets in Windows Makefile

- Easier ./configure handling (--with-tcl can now cover lib and include)

- Bug fix Unix Makefile test rule was broken on some systems 

- Added --with-aprinclude and --with-apuinclude variables to configure

- CGI https scheme detection compatibility with Sunone web server

- Bug fixes regarding wrong usage of Tcl API

- Bug fix when handling multipart forms (Bug 43212)

- Better logging when mod_websh cannot get a Tcl interpreter for a request

- Fixed http response problem with Apache 2.2.1 and later

- Fixed websh.spec dependencies, paths, and improved installation 
  directories (more common rpm style) for Unix

- Cleanup of unused local variables and some redundant initializations 
  of local variables throughout the code (compile with -Wall w/o warnings)

- Fix of html file handling in mod_websh under Windows

- Added documentation of [web::config reset] and [web::cmdurlcfg]
  and other minor fixes in quickref

- Updated [web::config copyright] output

- Fixed [web::config key ?value?] to always return old value

- Fixed [web::config reset] to reset all configuration options

- Use Tcl8.5 feature [return -level <lvl>] to rewrite exit so that script
  in mod_websh terminates w/o terminating the process. (Only attempts this
  with Tcl >= 8.5. In older versions of Tcl mod_websh will throw an 
  error when exit is called, but not terminate the process either.)


Websh 3.6.0b4 (2006-03-05)
--------------------------

- Added Tcl [memory] command to mod_websh when compiled with TCL_MEM_DEBUG
  (Note: Tcl must also be compiled with TCL_MEM_DEBUG for this to work)

- Memory leaks fixed (logging and web::putx)

- Files created using filenames from [web::tempfile] are now always deleted 
  as long as the process terminates properly (e.g. is not killed)

- Makefile targets for purify and pure coverage fixed

- Added getval option to filecounter handle to retrieve current value from 
  filecounter file (see documentation of web::filecounter)

- Compatibility with Apache 2.2

- Installation under Unix directly to prefix, not prefix/websh, 
  which is more common.

- Configuration and test compatibility fixes for OSX Darwin


Websh 3.6.0b3 (2005-11-11)
--------------------------

- Windows XP Makefile provided (for Visual Studio 6 nmake)

- Install for Unix fixed

- Added simple setup example for mod_websh


Websh 3.6.0b2 (2005-10-28)
--------------------------

- Renamed [web::logfilter] to [web::loglevel] (kept [web::logfilter] for
  compatibility)

- When logging is setup in [web::initializer], it is kept across
  requests and is still available in [web::finalizer]

- Internal commands [web::loglevel delete -requests] and [web::logdest
  delete -requests] to delete log configuration added during request
  only

- Changed output of [web::loglevel names] and [web::logdest names] to
  return a list of names (as the command indicates)
  Added [web::loglevel levels] and [web::logdest levels] to provide
  the functionality formerly provided by the names subcommand (used
  for testing only)


Websh 3.5.1b1 (unreleased)
--------------------------

- I18n fixes to support multi-byte character sets

- Unix: All file permissions of created files configurable with
  [web::config filepermissions]. Default is 0644. (This affects log
  files, session files, filecounter files, and temporary form upload
  files) Note that prevously, the default permissions for session
  files was 0666.

- Fixed some documentation errors/omissions in the reference

- Works with Tcl8.5

- Fixed [web::putx] some problems with tag syntax (<? ?>), selection
  of response object, and double UTF encoding

- Resolved cookie handling side effects when dealing with different
  locales and fixed expiry to conform to specs

- Unix: provide config.sub and config.guess for some versions of
  autoconf

- Fixed minor memory leaks (when dealing with multipart form data)

- Fixed [web::interpmap] to work with spaces in file names

- Fixed [web::cmdurl] when scheme is given in urlformat


Websh 3.5.1a1 (unreleased)
--------------------------

- Works with Tcl 8.4


Websh 3.5.0
-----------

- See src/ChangeLog
